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


Данные в Юникоде

Типы данных Юникода SQL предоставляются для описания данных, которые находятся в Юникоде в собственном коде на СУБД. Предоставляется тип данных C Юникода, позволяющий приложению привязать данные к буферу Юникода. Диспетчер драйверов может преобразовать данные из типа ЮникодА C (SQL_C_WCHAR), чтобы сделать его функцией с драйвером ANSI.

ODBC 3.0 или 2.Приложение x всегда привязывается к типам данных ANSI. Для оптимальной производительности приложение ODBC 3.5 (или более поздней версии) должно привязаться к типу данных ANSI, если тип столбца SQL — ANSI, и должен привязаться к типу данных ЮникодА, если тип столбца SQL является Юникодом.

Индикаторы типов SQL Юникода : SQL_WCHAR, SQL_WVARCHAR и SQL_WLONGVARCHAR. SQL_WCHAR данные имеют фиксированную длину строки, а SQL_WVARCHAR имеет переменную длину с объявленным максимальным и SQL_WLONGVARCHAR имеет переменную длину с максимальной длиной, которая зависит от источника данных.

Индикатор типа C Юникода SQL_C_WCHAR. Это значение по умолчанию для каждого индикатора типов Юникода SQL. Все типы SQL можно преобразовать в SQL_C_WCHAR, а SQL_C_WCHAR можно преобразовать во все типы SQL. Приложение может получить данные одним из трех способов:

  • Получите данные как SQL_C_CHAR.

  • Извлеките данные как SQL_C_WCHAR.

  • Объявите данные как SQL_C_TCHAR. Это макрос, который вставляет SQL_C_WCHAR, если приложение компилируется как приложение Юникода или вставляет SQL_C_CHAR, если он компилируется как приложение ANSI.

SQL_C_TCHAR объявляется в функции следующим образом:

SQLBindParameter(StatementHandle, 1, SQL_PARAM_INPUT, SQL_C_TCHAR, SQL_WCHAR, NameLen, 0, Name, 0, &Name)  

Когда приложение компилируется как приложение Юникода, аргумент ValueType будет изменен с SQL_C_TCHAR на SQL_C_WCHAR. Когда приложение компилируется как приложение ANSI, аргумент ValueType будет изменен на SQL_C_CHAR.

Драйверы Юникода по-прежнему должны поддерживать типы данных ANSI, включая SQL_CHAR. Если приложение, работающее с драйвером Юникода, привязывается к SQL_CHAR, диспетчер драйверов не сопоставляет данные SQL_CHAR с SQL_WCHAR. Драйвер Юникода должен принять данные SQL_CHAR.

Диспетчер драйверов хранит имена драйверов и доменных имен в Юникоде и сопоставляет их с ANSI по мере необходимости. Если символ Юникода нельзя сопоставить с символом ANSI (как может произойти, если символы на кодовой странице, которая не является машинной кодовой страницей компьютера, используются в именах драйверов и DSN), символы, которые не удалось преобразовать, представлены символами по умолчанию, предоставленными системой.