【发布时间】:2017-06-09 11:28:09
【问题描述】:
向 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();
}
如果名称只包含基本字符,一切都很好:代码返回
名称:“Nowy uklad tablicy”
名称取自 QLineEdit,因此如果它包含波兰字符,例如“Nowy układ tablicy”在文本字段中可见,它返回:
name: "Nowy uk³ad tablicy"
错误:“不正确的字符串值:'\xB3ad ta...' for column 'name' at row 1 QMYSQL3: Unable to execute statement”
我想使用 QString::toUtf8,然后没有错误并且表上的 SELECT 返回了良好的值(带有“ł”),但是 Qt 从数据库返回的内容是错误的,但又有所不同:
现在的英国制表
现在我已将数据库的排序规则从 utf8_general_ci 更改为 utf16_unicode_ci,因为它是 QString AFAIK 的本机排序规则。仍然出现相同的错误。我只会使用 QString::fromUtf8 来读取值,但 QSqlTableModel 可以自己工作。奇怪的是,这不是我第一次通过 QSqlTableModel 进行 MySQL/Qt 集成,但我以前从未遇到过类似的问题……我刚刚升级了 Qt,所以可能就是这样。有什么想法吗?
【问题讨论】:
标签: c++ mysql qt qstring qsqltablemodel