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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Основные понятия

Обработка результатов (ODBC)

Поддержка параметров сортировки и Юникода