向 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();
}
如果 name 只包含基本字符,一切都很好:代码返回
名称:“Nowy uklad tablicy”
名称取自 QLineEdit,因此如果它包含波兰语字符,例如“Nowy układ tablicy”在文本字段中可见,则返回:
名称:“Nowy uk³ad tablicy”
错误:“不正确的字符串值:第 1 行 QMYSQL3 的列 'name' 的'\xB3ad ta...':无法执行语句”
我想使用 QString::toUtf8,然后没有错误,并且表上的 SELECT 返回了良好的值(带有“ł”),但是 Qt 从数据库返回的内容是错误的,但又有所不同:
Nowy ukÅad tablicy
现在我改变了数据库的排序规则,从 utf8_general_ci 到 utf16_unicode_ci,因为它是 QString AFAIK 的原生排序规则。仍然出现相同的错误。我只会使用 QString::fromUtf8 来读取值,但 QSqlTableModel 可以自己工作。奇怪的是,这不是我第一次通过 QSqlTableModel 进行 MySQL/Qt 集成,但我以前从未遇到过类似的问题……我刚刚升级了 Qt,所以可能就是这样。有任何想法吗?