Поддержка UTF-8 в драйвере OLE DB для SQL Server

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

Скачать драйвер OLE DB

Microsoft OLE DB Driver для SQL Server (версия 18.2.1) обеспечивает поддержку серверного кодирования UTF-8. Сведения о поддержке UTF-8 в SQL Server см. в следующих статьях.

В версии драйвера 18.4.0 добавлена поддержка кодировки клиента UTF-8 (включается с помощью флажка "Использовать Юникод UTF-8 для поддержки языков по всему миру" в разделе "Параметры региона" в Windows 10 и Windows 11).

Примечание

Microsoft OLE DB Driver for SQL Server использует функцию GetACP для определения кодировки входного буфера DBTYPE_STR.

Сценарии, в которых GetACP возвращает кодировку UTF-8 (включается с помощью флажка "Использовать Юникод UTF-8 для поддержки языков по всему миру" в разделе "Параметры региона" в Windows 10 м Windows 11), поддерживаются, начиная с версии 18.4. В предыдущих версиях, если буфер должен хранить данные в Юникоде, для буфера следует задать тип данных DBTYPE_WSTR (в кодировке UTF-16).

Вставка данных в столбец CHAR или VARCHAR в кодировке UTF-8

При создании буфера входного параметра для вставки буфер описан с помощью массива структур DBBINDING. Каждая структура DBBINDING связывает отдельный параметр с буфером потребителя и содержит такие сведения, как длина и тип значения данных. Для буфера входного параметра типа CHAR параметру wType структуры DBBINDING должно быть присвоено значение DBTYPE_STR. Для буфера входного параметра типа WCHAR параметру wType структуры DBBINDING должно быть присвоено значение DBTYPE_WSTR.

При выполнении команды с параметрами драйвер создает сведения о типе данных параметра. Если тип буфера входных данных и тип данных параметра совпадают, преобразование в драйвере не выполняется. В противном случае драйвер преобразует буфер входного параметра в тип данных параметра. Пользователь может явно указать тип данных параметра, вызвав ICommandWithParameters:SetParameterInfo. Если данные не указаны, драйвер извлекает сведения о типе данных параметра путем (a) получения метаданных столбца с сервера при подготовке инструкции или (б) попытки преобразования по умолчанию из типа данных входного параметра.

Буфер входного параметра может быть преобразован в сервер c параметрами сортировки столбцов драйвером или сервером в зависимости от типа данных входного буфера и типа данных параметра. Во время преобразования возможна потеря данных, если кодовой страницей клиента или кодовой страницей параметров сортировки базы данных не могут быть представлены все символы из буфера входных данных. В следующей таблице описан процесс преобразования при вставке данных в столбец с поддержкой UTF-8.

Тип данных буфера Тип данных параметра Преобразование Меры предосторожности пользователя
DBTYPE_STR DBTYPE_STR Преобразование сервера из кодовой страницы клиента в кодовую страницу параметров сортировки базы данных; преобразование сервера из кодовой страницы параметров сортировки базы данных в кодовую страницу с параметрами сортировки столбцов. Убедитесь, что кодовая страница клиента и кодовая страница параметров сортировки базы данных могут представлять все символы во входных данных. Например, для вставки польского символа кодовой странице клиента можно присвоить значение 1250 (ANSI центральноевропейские), а параметры сортировки базы данных могут использовать польский язык в качестве обозначения параметров сортировки (например, Polish_100_CI_AS_SC) или же включить UTF-8.
DBTYPE_STR DBTYPE_WSTR Преобразование драйвера из кодировки страницы клиента в кодировку UTF-16; преобразование сервера из кодировки UTF-16 в кодовую страницу с параметрами сортировки столбцов. Убедитесь, что кодовая страница клиента может представлять все символы во входных данных. Например, чтобы вставить польский символ, можно присвоить кодовой странице клиента значение 1250 (ANSI центральноевропейские).
DBTYPE_WSTR DBTYPE_STR Преобразование драйвера из кодировки UTF-16 в кодовую страницу параметров сортировки базы данных; преобразование сервера из кодовой страницы параметров сортировки базы данных в кодовую страницу с параметрами сортировки столбцов. Убедитесь, что кодовая страница параметров сортировки базы данных может представлять все символы во входных данных. Например, для вставки польского символа в кодовой странице параметров сортировки базы данных можно использовать польский в качестве обозначения параметров сортировки (например, Polish_100_CI_AS_SC) или же включить UTF-8.
DBTYPE_WSTR DBTYPE_WSTR Преобразование сервера из UTF-16 в кодовую страницу с параметрами сортировки столбцов. Нет.

Получение данных из столбца CHAR или VARCHAR в кодировке UTF-8

При создании буфера для извлеченных данных буфер описан с помощью массива структур DBBINDING. Каждая структура DBBINDING связывает один столбец в извлеченной строке. Для получения данных столбцов типа CHAR в параметре wType структуры DBBINDING установите значение DBTYPE_STR. Для получения данных столбцов типа WCHAR в параметре wType структуры DBBINDING установите значение DBTYPE_WSTR.

Для получения результирующего индикатора типа буфера DBTYPE_STR драйвер преобразует данные из кодировки UTF-8 в кодировку клиента. Пользователю необходимо убедится, что кодировка клиента может представить данные из столбца UTF-8. В противном случае может произойти потеря данных.

Для получения результирующего индикатора типа буфера DBTYPE_WSTR драйвер преобразует данные из кодировки UTF-8 в кодировку UTF-16.

Обмен данными с серверами, не поддерживающими UTF-8

Драйвер Microsoft OLE DB Driver for SQL Server обеспечивает доступ к данным на сервере тем способом, который понятен серверу. При вставке данных из клиентов с поддержкой UTF-8 драйвер преобразует строки в кодировке UTF-8 в кодовую страницу параметров сортировки базы данных перед отправкой на сервер.

Примечание

Использование интерфейса ISequentialStream для вставки данных в кодировке UTF-8 в старый текстовый столбец возможно только на серверах с поддержкой UTF-8. Дополнительные сведения см. в разделе BLOB-объекты и объекты OLE.

См. также:

Возможности драйвера OLE DB для SQL Server
Поддержка UTF-16 в драйвере OLE DB для SQL Server