0

我使用NHibernate查詢SQLite數據庫。通常,我想要執行不區分大小寫的字符串查詢。最近,我發現儘管我可以用西里爾字符插入一行,但我無法使用不區分大小寫的查詢來選擇它。這是查詢的樣子: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列中進行選擇,還將選擇包含西里爾字符的行?

回答

3

默認情況下,不區分大小寫的查詢只能在SQLite中使用ASCII字符。

查看常見問題:Case-insensitive matching of Unicode characters does not work.

+0

謝謝。這描述了爲什麼它不工作。它沒有描述潛在的修復或解決方法。就我所能找到的情況而言,即使是建立ICU支持似乎也沒有一般的病例修復。 – anthony 2010-08-12 07:40:55

+0

對於LIKE運算符,SQLite的ICU擴展使用與語言無關的大小寫摺疊AFAIK。也許這裏給出的一些例子可能會有所幫助:http://www.sqlite.org/cvstrac/fileview?f=sqlite/ext/icu/README.txt – gclj5 2010-08-12 08:03:46