抛光字符的“不正确的字符串值”(QSqlTableModel,MySQL)

时间:2017-01-24 15:29:35

标签: c++ mysql qt qstring qsqltablemodel

将记录添加到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,所以可能就是这样。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

修正:

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