В Qt парсится файл, в котором есть Emoji символы. После этого, данные записываются в MySql таблицу типа - InnoDB, в атрибут типа varchar. После добавления в таблицу (да и в самом Qt при дебаге) часть Emoji, такие как:
https://emojipedia.org/drop-of-blood/ https://emojipedia.org/tooth/ - не отображаются
Что уже делал:
Создание таблицы с указанием кодировки атрибутов:
"CREATE TABLE IF NOT EXISTS `"+tableName+"`(filed1 int not null AUTO_INCREMENT,
filed2 varchar(30),filed3 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
filed4 varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,filed5 varchar(100),
PRIMARY KEY(filed1),INDEX USING BTREE(filed1)"");"
Установка кодировки для БД:
ALTER DATABASE <имя моей базы> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Установка кодировки в Qt:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
Мне подсказали, что:
mysql-клиенты, кстати, тоже должны использовать кодировку utf8mb4, иначе на перекодировании туда-сюда emoji тоже потеряются
Отсюда, два вопроса:
1) Судя по сообщениям этой темы
https://stackoverflow.com/questions/25727970/pasti... и по данным отладчика - qt захватывает эмодзи в виде escape последовательностей 55358, 56759, но просто не отображает (мне собственно, этого и не надо в редакторе), но если символы присутствуют в строке, почему в таблицу они все равно пишутся некорректно?
2)
https://bugreports.qt.io/browse/QTBUG-60039?focuse...
-
As you know utf8mb4 is a MySQL define and not a real codec.
- тогда, как mysql-клиенты могут его использовать?
Еще, видел вариант, что после подключения к БД - необходимо первым запросом выполнить:
SET NAMES ("имя кодировки")
Как, работая с Qt, как с MySql клиентом, добиться полной поддержки Emoji символов, при записи в таблицу?