【发布时间】:2011-02-05 17:11:17
【问题描述】:
我有一个 SQLite 数据库,其中包含西里尔字母行。 例如:
CREATE TABLE customer (
id INTEGER PRIMARY KEY,
name TEXT,
surname TEXT
);
假设其中两行是这样的:
"153 | Иван | Попов"
"243 | Ivan | Popov"
其实是俄文和英文写的同名姓。
我在我的程序中使用 c++ 和 Qt。我想选择在 name 或 surname 列中包含特定字符串的行。
因为我使用QSqlTableModel,所以我只是在 SQL 查询中使用过滤器(这只是 SQL 查询的WHERE 的一部分):
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”时,它会显示正确的行(id 为 243)。但是,当我尝试对 'иван' 执行相同操作时,它不会显示,而 'Иван'、'ван' 等会显示正确的条目。似乎该查询仅适用于西里尔字母区分大小写的匹配项,而它适用于拉丁字母。
我知道 ICU 并已启用它。它有效:
$ sqlite3
$ SELECT 'Иван' like 'иван';
1
所以我还是不明白为什么我的程序中的查询在我使用西里尔字母时是区分大小写的?它与 Qt 中的 SQL 查询实现有某种关系吗?
【问题讨论】:
标签: sqlite qt unicode case-insensitive