将记录添加到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,因此如果它包含抛光字符,例如“Nowyukładtablicy”在文本字段中可见,它返回:
名称:“Nowyouk³adtablicy”
错误:“错误的字符串值:'\ xB3ad ta ...'列第1行'name'QMYSQL3:无法执行语句”
我想要使用QString :: toUtf8,然后没有错误,表上的SELECT返回良好的值(带“ł”),但Qt从数据库返回的内容是错误的,但却不同:
NowyukÅadtablicy
现在我已经将数据库的排序规则从utf8_general_ci更改为utf16_unicode_ci,因为它是QString AFAIK的原生排序规则。仍出现相同的错误。我只是使用QString :: fromUtf8来读取值,但QSqlTableModel可以自己运行。奇怪的是,这不是我第一次通过QSqlTableModel进行MySQL / Qt集成,但我之前从未遇到过类似的问题......我刚刚升级了Qt,所以可能就是这样。有什么想法吗?
答案 0 :(得分:0)
修正:
QLocale::setDefault(QLocale(QLocale::Polish, QLocale::Poland));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));