Получить и установить символы wchar_t из c ++ в MySQL для c ++ - PullRequest
0 голосов
/ 25 сентября 2011

У меня есть база данных (Mysql) с некоторыми полями в UTF-8 (я могу изменить это при необходимости).

Я использую старый MySQL 'Communicator' или его предшественника, я написал код ~ 3 года назад, и все, что я знаю сегодня, это то, что я связываюсь с libmysql.lib и #include "mysql.h" (скажите, если хотите, мне больше копать).

Дело в том, что я понятия не имею, как вставлять и читать не ASCII.

Я знаю о MultiByteToWideChar, но некоторый код компилируется под Linux (gcc), так что это не сработает, я думаю.

Какова стандартная процедура получения и установки std :: wstrings (или wchar_t *) из / в базу данных MySQL, когда код должен работать в Linux и Windows?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011

Используйте API mysql_set_character_set() для изменения набора символов соединения на "utf8". Конвертируйте ваши wstrings в UTF-8 (нет библиотечной функции, но вы можете написать ее довольно легко или использовать iconv) и передавать указатели UTF-8 в MySQL.

Этот API отсутствует в более старых версиях MySQL C ++ API (> 5.0.7), поэтому сначала проверьте свой заголовок.

Примечание: в Win32 с Visual Studio тип данных wchar_t равен short, а не int. Вы можете изменить кодировку соединения на «ucs2» и напрямую передавать указатели wchar_t, просто приведя их к типу char *.

1 голос
/ 27 сентября 2011

Я рекомендую вам хранить ваши данные в MySQL в форме UTF-8, а не пытаться убедить его взять Windows UTF-16.Если ваш текст в основном западный, кодировка UTF-8 будет более компактной и с большей вероятностью будет работать с природой MySQL, написанной на C и Unix.

В * 1003 есть конкретные примеры для Visual C ++.* MySQL ++ , которые показывают, как это сделать.См., Например, CExampleDlg::ToUTF8() и функции, вызывающие его в examples/vstudio/mfc/mfc_dlg.cpp.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' '*' тогда, когда он содержит .за всем этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...