У меня есть база данных SQLite с кириллическими строками.Например:
CREATE TABLE customer (
id INTEGER PRIMARY KEY,
name TEXT,
surname TEXT
);
Предположим, что две строки выглядят следующим образом:
"153 | Иван | Попов"
"243 | Ivan | Popov"
На самом деле это одно и то же имя и фамилия, написанные на русском и английском языках.
Я использую C ++ и Qt в моей программе.Я хочу выбрать строки, содержащие определенную строку в столбцах имени или фамилии.
Поскольку я использую QSqlTableModel
, я просто использую фильтр (который является просто WHERE
частью запроса SQL) с запросом SQL:
void filterTable(QString filter)
{
QString query;
if(!filter.isEmpty())
{
//I've added the wildcards to be able to search
//using only subset of the name or surname
query += "name LIKE '%" + filter "%' OR ";
query += "surname LIKE '%" + filter "%'";
}
mySqlTableModel->setFilter(query);
}
Когда я устанавливаю фильтр на «ivan», он показывает правильную строку (с идентификатором 243).Однако, когда я пытаюсь сделать то же самое с 'иван', он не отображается, в то время как 'Иван', 'ван' и т. Д. Показывают правильные записи.Кажется, что запрос работает только с чувствительными к регистру совпадениями в кириллице, хотя он отлично работает с латинскими буквами.
Я знаю об ICU и уже включил его.И это работает:
$ sqlite3
$ SELECT 'Иван' like 'иван';
1
Так что я до сих пор не могу понять, почему мои запросы в моей программе чувствительны к регистру, когда я использую буквы кириллицы?Это как-то связано с реализацией SQL-запроса в Qt?