如何订购包含变音符号和其他特殊字符的SQLite结果?

时间:2010-07-23 11:26:35

标签: sqlite

我想根据德语使用的规则从SQLite订购我的结果。这意味着像“ ”这样的字符被视为“ae”,或者“ ”被视为“ue”。

此时解决方案如下所示:

SELECT * FROM data ORDER BY REPLACE(REPLACE(REPLACE(UPPER(einrichtung),'�','AE'),'�','OE'),'�','UE') LIMIT 0,20

解决方案不应涉及安装更多工具或修改SQLite服务,因为无论在何处部署,该项目都应该“开箱即用”。

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题而且仍然无法实现。

这是来自sqlite.org常见问题解答的引用:

  

问:Unicode字符的不区分大小写的匹配不起作用。

     

答:SQLite的默认配置仅支持ASCII的不区分大小写的比较   字符。这样做的原因是完全使用Unicode   不区分大小写的比较和大小写转换需要表和   逻辑几乎是SQLite库大小的两倍。该   SQLite开发人员认为任何需要完整Unicode的应用程序   案例支持可能已经具有必要的表格和功能   所以SQLite不应占用空间来复制这种能力。   SQLite不是默认提供完整的Unicode案例支持   提供链接外部Unicode比较和   转换例程。应用程序可以使内置NOCASE重载   整理序列(使用sqlite3_create_collat​​ion())和内置   like(),upper()和lower()函数(使用   sqlite3_create_function())。 SQLite源代码包括一个" ICU"   执行这些重载的扩展。或者,开发人员可以写他们的   基于他们自己的Unicode感知比较例程自己的重载   已经包含在他们的项目中。

答案 1 :(得分:0)

你必须用UTF-8 / UTF-16做所有事情。 例如,如果你正在处理PHP,你也可以使用utf8_encode / utf8_decode。

另见http://www.sqlite.org/pragma.html#pragma_encoding

(我知道这个问题很老,但是人们仍然遇到正确编码问题。)

答案 2 :(得分:-4)

嘿,这是第三个千年,伙计,再也没有特殊的角色 - 只是角色。

也就是说,您似乎想要更改这些字符之间的排序规则行为。 This extension可能对您有所帮助。如果您不喜欢任何提供的排序规则,我认为您可以自行编程,如上所述 here