2010-08-28 5 views
2

Je crée une base de données SQLite de qt comme ceci:Insérer une chaîne unicode dans la base de données SQLite de qt

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

Lorsque vous essayez d'insérer des caractères macédoniens dans la base de données SQLite, les caractères sont insérés comme ???. Selon ce lien http://www.qtcentre.org/threads/26202-SQLite-connection-and-encoding?highlight=unicode+and+sqllite, j'ai besoin de créer ma base de données avec l'encodage utf-16 pour résoudre mon problème. L'encodage par défaut de SQLite est utf-8. Comment puis je faire ça? Où spécifier cette option dans mon code?

Répondre

6

De ma compréhension, vous devriez être bien avec UTF8, pls, vérifier si un exemple ci-dessous fonctionnerait pour vous:

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

sortie doit être:

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

maintenant à votre question initiale Je crois que vous pouvez avoir votre base de données sqlite en UTF-16 comme encodage par défaut si la base de données est ouverte avec la fonction sqlite3_open16. Selon le code source QT (qsql_sqlite.cpp QSQLiteDriver) ils utilisent la fonction sqlite3_open_v2 pour ouvrir la connexion à la base de données qui est UTF-8, mais encore une fois, il n'y a rien de mal à cela pour travailler correctement avec les caractères cyrilliques.

espérons que cela aide, salutations

Questions connexes