Поделиться через


Автоматическое преобразование символьных данных

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Символьные данные, такие как переменные символов ANSI, объявленные с SQL_C_CHAR или данными, хранящимися в SQL Server с помощью char, varchar или текстовых типов данных, могут представлять только ограниченное количество символов. Символьные данные, в которых для обозначения одного символа требуется один байт данных, могут представлять только 256 символов. Для интерпретации значений, содержащихся в переменных SQL_C_CHAR, используются кодовые страницы ANSI (ACP) клиентского компьютера. Значения, хранящиеся с помощью char, varchar или текстовых типов данных на сервере, оцениваются с помощью ACP сервера.

Если сервер и клиент имеют одинаковые ACP, то они не имеют проблем с интерпретацией значений, хранящихся в SQL_C_CHAR, char, varchar или текстовых объектах. Если сервер и клиент имеют разные APS, то SQL_C_CHAR данные от клиента могут интерпретироваться как другой символ на сервере, если он используется в столбцах char, varchar или текстовых столбцах, переменных или параметрах. Например, символьный байт, содержащий значение 0xA5, интерпретируется как символ Ñ на компьютере с помощью кодовой страницы 437 и интерпретируется как знак иены (т.) на компьютере под управлением кодовой страницы 1252.

Символы в формате Юникода записываются с использованием двух байт данных. В стандарт Юникод включены все дополнительные символы, поэтому все символы Юникода интерпретируются всеми компьютерами одинаково.

Функция AutoTranslate драйвера ODBC для собственного клиента SQL Server пытается свести к минимуму проблемы при перемещении символьных данных между клиентом и сервером с различными кодовых страницами. Автотрансляция может быть задана в строке подключения SQLDriverConnect, в строке конфигурации SQLConfigDataSource или при настройке источников данных для драйвера ODBC собственного клиента SQL Server с помощью администратора ODBC.

Если параметр AutoTranslate имеет значение "нет", преобразования не выполняются для данных, перемещаются между переменными SQL_C_CHAR на клиенте и char, varchar или текстовых столбцах, переменных или параметрах в базе данных SQL Server. Эти битовые шаблоны могут по-разному интерпретироваться клиентом и сервером, если данные содержат символы национального алфавита, и два компьютера имеют различные кодовые страницы. Данные интерпретируются единообразно, если оба компьютера используют одну и ту же кодовую страницу.

Если для параметра AutoTranslate задано значение "да", драйвер ODBC собственного клиента SQL Server использует Юникод для преобразования данных, перемещаемых между переменными SQL_C_CHAR на клиенте и char, varchar или текстовых столбцах, переменных или параметрах в базе данных SQL Server:

  • При отправке данных из переменной SQL_C_CHAR на клиенте в char, varchar или текстовый столбец, переменную или параметр в базе данных SQL Server драйвер ODBC сначала преобразуется из SQL_C_CHAR в Юникод с помощью ACP клиента, а затем из Юникода обратно в символ с помощью ACP сервера.

  • Когда данные отправляются из символа, varchar или текстового столбца, переменной или параметра в базе данных SQL Server в переменную SQL_C_CHAR на клиенте, драйвер ODBC собственного клиента SQL Server сначала преобразуется из символа в Юникод с помощью ACP сервера, а затем из Юникода обратно в SQL_C_CHAR с помощью ACP клиента.

Так как все эти преобразования выполняются драйвером ODBC собственного клиента SQL Server, выполняющимся на клиенте, сервер ACP должен быть одной из кодовых страниц, установленных на клиентском компьютере.

Выполнение символьных преобразований с использованием формата Юникод гарантирует правильное преобразование всех символов, существующих на обеих кодовых страницах. Но если символ имеется на одной кодовой странице и отсутствует на другой, этот символ не может быть представлен на целевой кодовой странице. Например, в кодовой странице 1252 имеется символ зарегистрированного товарного знака (®), а на кодовой странице 437 такого символа нет.

Настройка AutoTranslate не оказывает влияния на эти преобразования.

  • Перемещение данных между символьными SQL_C_CHAR клиентскими переменными и nchar, nvarchar или ntext столбцами, переменными или параметрами в базах данных SQL Server.

  • Перемещение данных между юникодом SQL_C_WCHAR клиентскими переменными и символьными символами, varchar или текстовыми столбцами, переменными или параметрами в базах данных SQL Server.

Данные всегда нужно преобразовывать при переходе из символьного формата в Юникод.

См. также

Обработка результатов (ODBC)
Поддержка параметров сортировки и Юникода