Чтение данных Unicode из DB2 через ADO и ODBC

Из моего приложения, написанного на Delphi 2009, я читаю и записываю данные в базу данных IBM DB2 с использованием ADO, ODBC-провайдера для ADO и ODBC:

Приложение -> ADO (Win32) -> ODBC-провайдер для ADO -> ODBC -> (нетто) -> DB2 (Windows)

Теперь, мое приложение должно хранить данные Unicode. Поэтому я установил кодовую страницу своей базы данных в UTF-8. Delphi внутренне обрабатывает строки в UTF-16 и передает их в виде многобайтовых символов в COM. Так что у меня должно быть все в порядке с кодировкой на стороне приложения.

Вставка non-ansi-chars в поле VARCHAR db работает нормально, они корректно отображаются в консоли управления DB2 (которая является Java-приложением, использующим, как я полагал, JDBC). В моем приложении (или любом другом написанном мной тестовом приложении, использующем запросы ADO), я получаю только последовательность байтов #$1A для полей VARCHAR с символами юникода в них.

Как ни странно, то же приложение работает нормально, если бэкэнд является базой данных Microsoft SQL. Получение ANSI-совместимых символьных строк также не является проблемой для DB2.

В документации DB2 говорится, что драйверы DB2 ODBC отвечают юникодными символами, если приложение вызывает API ODBC с суффиксом-W. Возможно ли, что при определенных обстоятельствах поставщик ODBC для ADO не вызывает эти функции, а вместо этого использует функции ANSI? Я попытался установить клиентскую кодовую страницу в строке подключения ADO и настройки драйвера ODBC безуспешно, хотя я мог бы сделать это неправильно WAV.

1 ответ

У меня была похожая проблема. я добавил DISABLEUNICODE=0 к моей строке подключения, и это решило это для меня.

Другие вопросы по тегам