2010-08-28 72 views
2

我創建從QT SQLite數據庫是這樣的:插入Unicode字符串從QT

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", mConnectionName); 
db.setDatabaseName("myDattabse.DB"); 
if (!db.open()) { 
return false; 
} 

當試圖在SQLite數據庫中插入馬其頓字符,字符插入爲???

根據這個鏈接http://www.qtcentre.org/threads/26202-SQLite-connection-and-encoding?highlight=unicode+and+sqllite,我需要用utf-16編碼創建我的數據庫來解決我的問題。 SQLite的默認編碼是utf-8。我怎樣才能做到這一點?哪裏可以在我的代碼中指定這個選項?

回答

6

從我的理解,你應該罰款與UTF8,請,請檢查下面的例子會爲你工作:現在

"тест1" 
"тест2" 

回你原來的問題:

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

輸出應該是,如果使用sqlite3_open16函數打開數據庫,我相信你可以使用UTF-16中的sqlite數據庫作爲默認編碼。根據QT源代碼(qsql_sqlite.cpp QSQLiteDriver),他們正在使用sqlite3_open_v2函數打開與UTF-8數據庫的連接,但同樣,爲了正確使用西里爾文字符,它沒有任何問題。

希望這會有所幫助,關注