как указать кодировку при коннекте через ODBC?
От: sushko Россия  
Дата: 29.09.15 12:02
Оценка:
Хочу читать данные из базы данных через ODBC API, клиентское приложение написано на VisualC и может быть как юникодным, так и ансишным. Когда я подключаюсь к базе данных из своего приложения, оно показывает все строковые данные как иероглифы (японские, если не ошибаюсь, если я к той же самой БД подключаюсь из MSExcel/MSQuery, то данные показываются правильно. Опробовал только на юникодовом клиенте и на двух базах данных: MSAccess и FireBird. При подключении к FB методом тыка выяснил, что из ODBC строки вылезают в UTF8.

Вопрос: как мне сделать так, чтобы ко мне в юникодовое или ANSI-приложение строки из ODBC вылезали в соответствующей приложению кодировке (Unicode/ansi)?
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Re: как указать кодировку при коннекте через ODBC?
От: wildwind Россия  
Дата: 30.09.15 18:36
Оценка:
Здравствуйте, 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)
Re: как указать кодировку при коннекте через ODBC?
От: MasterZiv СССР  
Дата: 01.10.15 14:43
Оценка:
Здравствуйте, sushko, Вы писали:

S>Хочу читать данные из базы данных через ODBC API, клиентское приложение написано на VisualC и может быть как юникодным, так и ансишным. Когда я подключаюсь к базе данных из своего приложения, оно показывает все строковые данные как иероглифы (японские, если не ошибаюсь, если я к той же самой БД подключаюсь из MSExcel/MSQuery, то данные показываются правильно. Опробовал только на юникодовом клиенте и на двух базах данных: MSAccess и FireBird. При подключении к FB методом тыка выяснил, что из ODBC строки вылезают в UTF8.


S>Вопрос: как мне сделать так, чтобы ко мне в юникодовое или ANSI-приложение строки из ODBC вылезали в соответствующей приложению кодировке (Unicode/ansi)?


Это если и задаётся, то параметрами, специфичными для конкретного драйвера (источника данных).
Читай документацию по конкретному драйверу.
Некоторые драйверы работают с использованием "родного" клиента для этой СУБД, иногда кодировки можно настроить и там.

Универсального ответа на этот вопрос не бывает.
Re: как указать кодировку при коннекте через ODBC?
От: Vladimir Alekseev  
Дата: 23.10.15 14:04
Оценка:
Здравствуйте, 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, а на уровне клиентского приложения раскодирую. При отсутствии серьезных требований к производительности этот костыль может сэкономить кучу времени и нервов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.