NHibernate、SQLite 和 Cyrillic 字符:区分大小写和回退查询
Posted
技术标签:
【中文标题】NHibernate、SQLite 和 Cyrillic 字符:区分大小写和回退查询【英文标题】:NHibernate, SQLite, and Cyrillic characters: case sensitivity and fallback queries 【发布时间】:2010-08-12 06:09:50 【问题描述】:我正在使用 NHibernate 查询 SQLite 数据库。一般来说,我想做不区分大小写的字符串查询。最近,我发现虽然我可以插入带有西里尔字符的行,但我无法使用不区分大小写的查询来选择它。这是查询的样子:
string foo = "foo";
IList<T> list = session.CreateCriteria(typeof(T)).
Add(Expression.Eq("Foo", foo).IgnoreCase()).List<T>();
但是,如果 IgnoreCase() 被删除,我可以使用上述查询选择行。一个天真的解决方法是在第一次查询后检查 list.Count == 0,然后进行后续区分大小写的查询。这种方法的主要缺点是查询不存在的行是一个相当常见的操作,现在由两个查询组成。
问题是,我如何构造一个 single 查询,该查询将从不区分大小写的 Foo 列中进行选择,但也会选择包含西里尔字符的行?
【问题讨论】:
【参考方案1】:默认情况下,不区分大小写的查询仅适用于 SQLite 中的 ASCII 字符。
查看此常见问题解答:Case-insensitive matching of Unicode characters does not work.
【讨论】:
谢谢。这描述了为什么它不起作用。它没有描述潜在的修复或解决方法。从我能找到的情况来看,即使是在 ICU 支持下进行构建似乎也没有一般的案例修复。 对于 LIKE 运算符,SQLite 的 ICU 扩展利用了与语言无关的大小写折叠,AFAIK。也许这里给出的一些例子可能会有所帮助:sqlite.org/cvstrac/fileview?f=sqlite/ext/icu/README.txt以上是关于NHibernate、SQLite 和 Cyrillic 字符:区分大小写和回退查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 SQLite“没有这样的表”测试 NHibernate - 生成模式
Fluent NHibernate and Mysql,SQLite
NHibernate 与 C#-Sqlite 在 > .NET 2.0 中没有 DbConnection
在我的 NHibernate / SQLite 项目中提交非常慢