Чтение данных 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
к моей строке подключения, и это решило это для меня.