NHibernate,SQLite和Cyrillic字符:区分大小写和后备查询

时间:2010-08-12 06:09:51

标签: sqlite nhibernate character-encoding internationalization

我正在使用NHibernate查询SQLite数据库。通常,我想做不区分大小写的字符串查询。最近,我发现尽管我可以插入一个带有西里尔字符的行,但我不能使用不区分大小写的查询来选择它。这就是查询的样子:

string foo = "foo";
IList<T> list = session.CreateCriteria(typeof(T)).
    Add(Expression.Eq("Foo", foo).IgnoreCase()).List<T>();

但是,如果删除IgnoreCase(),我可以使用上面的查询选择行。一个简单的解决方法是在第一次查询后检查list.Count == 0,并进行后续区分大小写的查询。这种方法的主要缺点是查询不存在的行是一个相当常见的操作,现在包含两个查询。

问题是,如何构建单个查询,该查询将从不区分大小写的Foo列中进行选择,还会选择包含西里尔字符的行?

1 个答案:

答案 0 :(得分:3)

默认情况下,不区分大小写的查询仅适用于SQLite中的ASCII字符。

请参阅此常见问题解答:Case-insensitive matching of Unicode characters does not work.