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


Поддержка UTF-8 в OLE DB Driver for SQL Server

Относится к:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsАналитическая платформа (PDW)SQL база данных в Microsoft Fabric

Скачать драйвер 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