"Неверное значение строки" для польских символов (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"));
Другие вопросы по тегам