Хочу читать данные из базы данных через ODBC API, клиентское приложение написано на VisualC и может быть как юникодным, так и ансишным. Когда я подключаюсь к базе данных из своего приложения, оно показывает все строковые данные как иероглифы (японские, если не ошибаюсь
, если я к той же самой БД подключаюсь из MSExcel/MSQuery, то данные показываются правильно. Опробовал только на юникодовом клиенте и на двух базах данных: MSAccess и FireBird. При подключении к FB методом тыка выяснил, что из ODBC строки вылезают в UTF8.
Вопрос: как мне сделать так, чтобы ко мне в юникодовое или ANSI-приложение строки из ODBC вылезали в соответствующей приложению кодировке (Unicode/ansi)?
Здравствуйте, sushko, Вы писали:
S>Вопрос: как мне сделать так, чтобы ко мне в юникодовое или ANSI-приложение строки из ODBC вылезали в соответствующей приложению кодировке (Unicode/ansi)?
Объявлять их соответствующего типа (SQL_C_CHAR/SQL_C_WCHAR) и настроить трансляцию в драйвере (для ANSI). Настройка кодировок и трансляции у каждого драйвера своя, смотри документацию. Для SQL Server, например, это параметр AutoTranslate. (
https://msdn.microsoft.com/en-us/library/ms131464.aspx)
Здравствуйте, sushko, Вы писали:
S>Хочу читать данные из базы данных через ODBC API, клиентское приложение написано на VisualC и может быть как юникодным, так и ансишным. Когда я подключаюсь к базе данных из своего приложения, оно показывает все строковые данные как иероглифы (японские, если не ошибаюсь, если я к той же самой БД подключаюсь из MSExcel/MSQuery, то данные показываются правильно. Опробовал только на юникодовом клиенте и на двух базах данных: MSAccess и FireBird. При подключении к FB методом тыка выяснил, что из ODBC строки вылезают в UTF8.
S>Вопрос: как мне сделать так, чтобы ко мне в юникодовое или ANSI-приложение строки из ODBC вылезали в соответствующей приложению кодировке (Unicode/ansi)?
Это если и задаётся, то параметрами, специфичными для конкретного драйвера (источника данных).
Читай документацию по конкретному драйверу.
Некоторые драйверы работают с использованием "родного" клиента для этой СУБД, иногда кодировки можно настроить и там.
Универсального ответа на этот вопрос не бывает.
Здравствуйте, sushko, Вы писали:
S>Хочу читать данные из базы данных через ODBC API, клиентское приложение написано на VisualC и может быть как юникодным, так и ансишным. Когда я подключаюсь к базе данных из своего приложения, оно показывает все строковые данные как иероглифы (японские, если не ошибаюсь, если я к той же самой БД подключаюсь из MSExcel/MSQuery, то данные показываются правильно. Опробовал только на юникодовом клиенте и на двух базах данных: MSAccess и FireBird. При подключении к FB методом тыка выяснил, что из ODBC строки вылезают в UTF8.
S>Вопрос: как мне сделать так, чтобы ко мне в юникодовое или ANSI-приложение строки из ODBC вылезали в соответствующей приложению кодировке (Unicode/ansi)?
Прошу сильно не бить за костыльность решения, но иногда в качестве быстрого и надежного костыля можно применить простое кодирование в Base64. Столкнулся с этим, когда имел зоопарк ODBC драйверов для Oracle (MS / Oracle XE под винды / стандартный Oracle Client 11g). Просто на уровне запроса преобразую все строковые переменные в Base64, а на уровне клиентского приложения раскодирую. При отсутствии серьезных требований к производительности этот костыль может сэкономить кучу времени и нервов.