Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2022, 21:22   #1
AlesyaAlesya
Новичок
Джуниор
 
Регистрация: 24.04.2022
Сообщений: 3
По умолчанию libmysql.lib и C++

Подскажите, пожалуйста, как правильно передавать юникодные строки в запросы
mysql_query(MYSQL*, char* )?

Например,
UnicodeString S = L"INSERT INTO `test` VALUES('3','南部攻防、長期化か ロシア、苦戦も勝利」宣伝' );";
Как корректно выполнить этот запрос, если mysql_query принимает только тип char* ?

Тип данных столбца в MySQL - utf8mb4_unicode_ci
AlesyaAlesya вне форума Ответить с цитированием
Старый 24.04.2022, 22:19   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)
см. здесь подробнее.
macomics вне форума Ответить с цитированием
Старый 25.04.2022, 21:45   #3
AlesyaAlesya
Новичок
Джуниор
 
Регистрация: 24.04.2022
Сообщений: 3
По умолчанию

Спасибо за ответ!!!
Я пробовала и mysql_real_query. Все равно либо ничего не записывается (ошибка SQL синтаксиса), либо пишутся кракозябы вместо иероглифов, типа такого "南部攻防、長期化か ãƒ*ã ‚·ã‚¢ã€è‹¦æˆ¦ã‚‚勝利」宣伝"

Никак не могу понять как из UnicodeString сформировать, например, UTF8 строку и потом передать ее в запрос.

Делала так:
1. Устанавливаю character set для столбца - utf8mb4
Конвертирую в UnicodeString в AnsiString через UTF8Encode или UnicodeToUtf8
Полученную AnsiString передаю в mysql_real_query

2. Устанавливаю character set для столбца - utf16 (utf16le)
Передаю в mysql_real_query указатель на (char*) S.c_str()

Как правильно действовать?
AlesyaAlesya вне форума Ответить с цитированием
Старый 25.04.2022, 21:50   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Попробуйте MultiByteToWideChar/WideCharToMultiByte
macomics вне форума Ответить с цитированием
Старый 26.04.2022, 00:47   #5
AlesyaAlesya
Новичок
Джуниор
 
Регистрация: 24.04.2022
Сообщений: 3
По умолчанию

Пробовала вот так:
AnsiString SA;
UnicodeString S = L"INSERT INTO `test` VALUES('7','南部攻防、長期化か ロシア、苦戦も勝利」宣伝' );";
int L = WideCharToMultiByte( CP_UTF8, 0, S.c_str(), S.Length(), NULL, 0, NULL, NULL );
SA.SetLength(L); // L = 100
L = WideCharToMultiByte( CP_UTF8, 0, S.c_str(), S.Length(), SA.c_str(), L, NULL, NULL );
int r = mysql_real_query(db, SA.c_str(), L); // L = 100
if ( r != 0 )
ShowMessage(mysql_error(db));

Записалось:
南部攻防、長期化か ãƒ*ã‚ ·ã‚¢ã€è‹¦æˆ¦ã‚‚勝利」宣伝

Т.е. ровно то же самое, что и с использование UTF8Encode
AlesyaAlesya вне форума Ответить с цитированием
Старый 26.04.2022, 12:48   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Проблема может заключаться в том как компилятор изначально воспринимает исходную строку.
Редактор -[преобразование текста]-> Компилятор -[Запись данных в бинарном виде]-> Программа -[WideCharToMultiByte] -> MySQL
Стоит попробовать определить эти символы вне программы (считать из файла) или задать массивом байтовых значений 0x.., 0x.. и .т.д.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с libmysql.dll -Jack- БД в Delphi 1 09.07.2012 07:49
Использование libmysql slava-217 БД в Delphi 0 15.01.2011 13:35
Error libmysql.dll Skynet91 БД в Delphi 2 09.02.2010 17:17
libmysql.dll kr00t БД в Delphi 1 05.02.2010 21:20
libMySQL jziiiiiii БД в Delphi 10 11.08.2008 16:16