Из моего приложения, написанного на Delphi 2009, я читаю и записываю в базу данных IBM DB2, используя ADO, ODBC-провайдера для ADO и ODBC:
Приложение -> ADO (Win32) -> ODBC-провайдер для ADO -> ODBC -> (net) -> 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 говорится, что драйверы ODBC DB2 отвечают символами Unicode, если приложение вызывает API ODBC суффикса-W. Возможно ли, что при определенных обстоятельствах поставщик ODBC для ADO не запускает эти функции, а вместо этого использует функции ANSI? Я попытался установить клиентскую кодовую страницу в строке подключения ADO и настройки драйвера ODBC безуспешно, хотя мог бы сделать это неправильно wav.