"Неверное значение строки" для польских символов (QSqlTableModel, MySQL)
У меня проблема при добавлении записи в QSqlTableModel:
QString name = out.getName().left(384/6); //UTF-16 max bytes/char = 6
qDebug() << "name:" << name;
record.setValue("name", name); //VARCHAR(384)
record.setValue("data", out.getData());
if (!boardLayoutsModel->insertRecord(-1, record)) {
qDebug() << "err:" << boardLayoutsModel->lastError().text();
}
Если имя содержит только базовые символы, все в порядке: код возвращается
Название: "Новогодние таблицы"
Имя взято из QLineEdit, поэтому, если оно содержит символы польского языка, например "Nowy układ tablicy", видимое в текстовом поле, оно возвращает:
название: "Nowy uk³ad tablicy"
ошибка: "Неверное строковое значение: '\xB3ad ta...' для столбца" имя "в строке 1 QMYSQL3: Невозможно выполнить оператор"
Я решил использовать QString::toUtf8, и тогда ошибки не возникает, и SELECT в таблице возвращает хорошее значение (с "ł"), но то, что Qt возвращает из базы данных, неверно и все же отличается:
Nowy ukÅad tablicy
Теперь я изменил параметры сортировки базы данных с utf8_general_ci на utf16_unicode_ci, так как это собственная сортировка QString AFAIK. По-прежнему появляется та же ошибка. Я бы просто использовал QString::fromUtf8 для чтения значения, но QSqlTableModel работает сам по себе. Странно то, что я не впервые делаю интеграцию MySQL/Qt через QSqlTableModel, но у меня никогда раньше не было подобных проблем... Я только что обновил Qt, так что это может быть. Есть идеи?
1 ответ
Исправлено с помощью:
QLocale::setDefault(QLocale(QLocale::Polish, QLocale::Poland));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));