Поддержка UTF-8 в драйвере OLE DB для SQL Server
Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)
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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по