代码之家  ›  专栏  ›  技术社区  ›  anthony

nhibernate、sqlite和西里尔字符:区分大小写和回退查询

  •  0
  • anthony  · 技术社区  · 14 年前

    我正在使用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 回复  |  直到 13 年前
        1
  •  3
  •   gclj5    14 年前

    默认情况下,不区分大小写的查询只能在sqlite中使用ASCII字符。

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