【问题标题】:How to order SQLite-results containing umlauts and other special characters?如何订购包含变音符号和其他特殊字符的 SQLite 结果?
【发布时间】:2010-07-23 11:26:35
【问题描述】:

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

此时解决方案如下所示:

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

该解决方案不应涉及安装更多工具或修改 SQLite 服务,因为该项目应该“开箱即用”地运行在任何将要部署的地方。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    我刚遇到同样的问题,还是不行。

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

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

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

    【讨论】:

      【解决方案2】:

      您必须使用 UTF-8/UTF-16 执行所有操作。 例如,如果您正在处理 PHP,您还可以使用 utf8_encode/utf8_decode。

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

      (我知道这个问题很老了,但人们仍然无法正确编码。)

      【讨论】:

        【解决方案3】:

        嘿,这是第三个千年,伙计,不再有特殊字符 - 只是字符。

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

        【讨论】:

        • 是的,我希望它们不再是特殊字符。但只要看看我帖子中的变音符号。 :) 谢谢你的回答,但我希望有一个解决方案,而无需重新编译 SQLite 或安装任何其他工具。但是我越是寻找这样的解决方案,我就越觉得没有。 :(
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 2019-08-31
        • 1970-01-01
        • 2017-10-20
        • 2010-10-06
        • 1970-01-01
        • 2018-08-01
        相关资源
        最近更新 更多