"Incorrect string value" 波兰语字符(QSqlTableModel,MySQL)

"Incorrect string value" for polish characters (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();
}

如果名称只包含基本字符,一切都很好:代码returns

name: "Nowy uklad tablicy"

名称取自 QLineEdit,因此如果它包含波兰语字符,例如“Nowy układ tablicy”在文本字段中可见,它 returns:

name: "Nowy uk³ad tablicy"

err: "Incorrect string value: '\xB3ad ta...' for column 'name' at row 1 QMYSQL3: Unable to execute statement"

我想用QString::toUtf8,然后就没有错误了SELECT就tablereturns好值(带“ł”),但是什么Qt 从数据库返回是错误的,但不同:

Nowy ukÅad tablicy

现在我已经将数据库的排序规则从 utf8_general_ci 更改为 utf16_unicode_ci,因为它是 QString AFAIK 的本机排序规则。仍然出现同样的错误。我只会使用 QString::fromUtf8 来读取值,但 QSqlTableModel 可以独立工作。奇怪的是,这不是我第一次通过 QSqlTableModel 进行 MySQL/Qt 集成,但我以前从未遇到过类似的问题......我刚刚升级了 Qt,所以可能就是这样。有什么想法吗?

修正:

QLocale::setDefault(QLocale(QLocale::Polish, QLocale::Poland));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));