2017-01-24 15 views
0

QSqlTableModelにレコードを追加するとき、私は問題を抱えている:ポリッシュ文字の「不正な文字列値」(QSqlTableModel、MySQLの)

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(); 
} 

名前はベースのみ文字が含まれている場合、すべてが正常である:コードは

を返します。

名: "ノヴィのukladのtablicy"

それはポーランドの文字が含まれているので、もし名前が、にQLineEditから取得され、例えば"ノヴィのukładのtablicyは、" テキスト・フィールドに表示され、それが返されます。

名: "ノヴィのuk³adのtablicy"

ERR:「不正な文字列値: '\ xB3ad taの...' 列は '行1 QMYSQL3で名」:文を実行することができません」

私はtoUtf8 :: QStringのを使用することを考え出し、その後、エラーがないとテーブルにSELECT(との良好な値を返します 『』 L)が、何Qtがデータベースから戻ってくるのは間違っていて、まだ異なります:

ノヴィukÅadのtablicy

は今、私はそれがQStringの私の知る限りのネイティブ照合だとしてutf16_unicode_ciするutf8_general_ciから、データベースの照合順序を変更しました。それでも同じエラーが表示されます。私は値を読み取るためにQString :: fromUtf8を使用しますが、QSqlTableModelはそれ自身で動作します。奇妙なことは、QSqlTableModelを使ってMySQL/Qtを統合するのは初めてのことではありませんが、これまでにも同様の問題があったことはありません... Qtをアップグレードしたばかりです。何か案は?

で固定

答えて

0

QLocale::setDefault(QLocale(QLocale::Polish, QLocale::Poland)); 
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); 
関連する問題