Mar*_*tin 2 sqlite qt character-encoding
我正在从qt创建一个SQLite数据库,如下所示:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", mConnectionName);
db.setDatabaseName("myDattabse.DB");
if (!db.open()) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
当尝试在SQLite数据库中插入马其顿字符时,插入的字符为???
.
根据这个链接http://www.qtcentre.org/threads/26202-SQLite-connection-and-encoding?highlight=unicode+and+sqllite,我需要用utf-16编码创建我的数据库来解决我的问题.SQLite默认编码是utf-8.我怎样才能做到这一点?在我的代码中指定此选项的位置?
根据我的理解,您应该使用UTF8,请检查以下示例是否适用于您:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if( !db.open() )
{
qDebug() << db.lastError();
qFatal( "Failed to connect." );
}
QSqlQuery query;
query.prepare("CREATE TABLE IF NOT EXISTS names (id INTEGER UNIQUE PRIMARY KEY, test_field VARCHAR(30))");
query.exec();
query.prepare(QObject::trUtf8("INSERT INTO names (id, test_field) VALUES (1, '????1')"));
query.exec();
query.prepare(QObject::trUtf8("INSERT INTO names (id, test_field) VALUES (2, '????2')"));
query.exec();
QSqlQuery select("SELECT test_field FROM names");
while (select.next())
{
qDebug() << select.value(0).toString();
}
Run Code Online (Sandbox Code Playgroud)
输出应该是:
"????1"
"????2"
Run Code Online (Sandbox Code Playgroud)
现在回到你原来的问题,我相信如果用sqlite3_open16函数打开数据库,你可以用UTF-16的sqlite数据库作为默认编码.根据QT源代码(qsql_sqlite.cpp QSQLiteDriver),他们使用sqlite3_open_v2函数打开与UTF-8数据库的连接,但同样,对于正确使用西里尔字符没有任何问题.
希望这有帮助,问候
归档时间: |
|
查看次数: |
3752 次 |
最近记录: |