【问题标题】:"Incorrect string value" for polish characters (QSqlTableModel, MySQL)波兰语字符的“字符串值不正确”(QSqlTableModel、MySQL)
【发布时间】: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


    【解决方案1】:

    固定为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多