"Incorrect string value" 波兰语字符(QSqlTableModel,MySQL)
"Incorrect string value" for polish characters (QSqlTableModel, MySQL)
我在向 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();
}
如果名称只包含基本字符,一切都很好:代码returns
name: "Nowy uklad tablicy"
名称取自 QLineEdit,因此如果它包含波兰语字符,例如“Nowy układ tablicy”在文本字段中可见,它 returns:
name: "Nowy uk³ad tablicy"
err: "Incorrect string value: '\xB3ad ta...' for column 'name' at row 1 QMYSQL3: Unable to execute statement"
我想用QString::toUtf8,然后就没有错误了SELECT就tablereturns好值(带“ł”),但是什么Qt 从数据库返回是错误的,但不同:
Nowy ukÅad tablicy
现在我已经将数据库的排序规则从 utf8_general_ci 更改为 utf16_unicode_ci,因为它是 QString AFAIK 的本机排序规则。仍然出现同样的错误。我只会使用 QString::fromUtf8 来读取值,但 QSqlTableModel 可以独立工作。奇怪的是,这不是我第一次通过 QSqlTableModel 进行 MySQL/Qt 集成,但我以前从未遇到过类似的问题......我刚刚升级了 Qt,所以可能就是这样。有什么想法吗?
修正:
QLocale::setDefault(QLocale(QLocale::Polish, QLocale::Poland));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
我在向 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();
}
如果名称只包含基本字符,一切都很好:代码returns
name: "Nowy uklad tablicy"
名称取自 QLineEdit,因此如果它包含波兰语字符,例如“Nowy układ tablicy”在文本字段中可见,它 returns:
name: "Nowy uk³ad tablicy"
err: "Incorrect string value: '\xB3ad ta...' for column 'name' at row 1 QMYSQL3: Unable to execute statement"
我想用QString::toUtf8,然后就没有错误了SELECT就tablereturns好值(带“ł”),但是什么Qt 从数据库返回是错误的,但不同:
Nowy ukÅad tablicy
现在我已经将数据库的排序规则从 utf8_general_ci 更改为 utf16_unicode_ci,因为它是 QString AFAIK 的本机排序规则。仍然出现同样的错误。我只会使用 QString::fromUtf8 来读取值,但 QSqlTableModel 可以独立工作。奇怪的是,这不是我第一次通过 QSqlTableModel 进行 MySQL/Qt 集成,但我以前从未遇到过类似的问题......我刚刚升级了 Qt,所以可能就是这样。有什么想法吗?
修正:
QLocale::setDefault(QLocale(QLocale::Polish, QLocale::Poland));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));