вставить строку юникода в базу данных SQLite из qt - PullRequest
2 голосов
/ 28 августа 2010

Я создаю базу данных SQLite из 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. Как я могу это сделать? Где указать эту опцию в моем коде?

1 Ответ

6 голосов
/ 29 августа 2010

Насколько я понимаю, у вас должно быть все в порядке с 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();
}

вывод должен быть:

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

теперь вернемся кВаш первоначальный вопрос, я полагаю, вы можете использовать базу данных sqlite в UTF-16 в качестве кодировки по умолчанию, если база данных открывается с помощью функции sqlite3_open16 .Согласно исходному коду QT (qsql_sqlite.cpp QSQLiteDriver) они используют функцию sqlite3_open_v2 для открытия соединения с базой данных, которая является UTF-8, но, опять же, в этом нет ничего плохого для правильной работы с символами кириллицы.

надеюсь, это поможет, с уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...