gpt4 book ai didi

.net - .net 中 SQLite 中不区分大小写的顺序

转载 作者:IT王子 更新时间:2023-10-29 06:29:22 24 4
gpt4 key购买 nike

我在使用 SQLite.net ( http://sqlite.phxsoftware.com ) 的 C# 程序中使用 SQLite。

默认情况下,SQLite select order by clause sort 区分大小写,我希望结果不区分大小写,我找到了“COLLATE NOCASE”,但文档说它只会处理 ascii 范围内的英文字符,我想要真正的国际语言使用 CultureInfo.CurrentCulture 归类进行不区分大小写的排序(使其使用 String.Compare 即可)。

最佳答案

我相信当前版本的 SQLite 中没有提供这种排序规则。因此,最明智的计划似乎是从查询中删除排序,然后在纯 .Net 中排序,您可以完全控制和访问线程的文化信息等构造。

因为两者都发生在同一个过程中,所以除非您的数据集非常大,否则这不会对性能产生太大影响。

SQLite 3 确实允许用户定义排序函数,这些可以在 SQLite.Net 中作为 .net 函数完成,但是跨托管/非托管边界来回调用的开销是相当大的。这是一个persons attempts to do it in c++ .除非您可以访问其他人在 C++ 中经过良好测试且稳定的 unicode 文化敏感排序,否则我建议尽可能坚持使用简单的排序方法。

当然,如果用户定义的排序规则的性能足以满足您当前的需求,那么就使用它。

[SQLiteFunction(Name = "CULTURESORT", FuncType = FunctionType.Collation)]
class CultureSort : SQLiteFunction
{
public override int Compare(string param1, string param2)
{
return String.Compare(
param1,param2, CultureInfo.CurrentCulture, CompareOptions.IgnoreCase)
);
}
}

如果你喜欢花哨的,请发布脚本:有一个受祝福的 SQLite 构建 integrates the ICU library对于订购/喜欢/上/下的“适当”unicode 支持,但您需要将其集成到用作 .Net 包装器支持的 sqlite 代码中。这多不容易。

关于.net - .net 中 SQLite 中不区分大小写的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com