我正在使用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列中进行选择,还会选择包含西里尔字符的行?
答案 0 :(得分:3)
默认情况下,不区分大小写的查询仅适用于SQLite中的ASCII字符。
请参阅此常见问题解答:Case-insensitive matching of Unicode characters does not work.