在我的SQLite 3数据库中,我有一些土耳其字符的记录,如“Ö”,“Ü”,“İ”等。当我用SELECT * FROM TABLE ORDER BY COLUMN_NAME
查询选择我的值时,以这些开头的记录人物即将到来。
通常情况下,他们应该来到每个字母的无点版本之后。就像“Ö”在“O”之后,“Ü”在“U”之后。
这是关于区域设置的吗?有没有办法控制这些设置?
我在Firefox中使用SQLite Manager来管理我的数据库。
提前致谢。
P.S。我知道它不是SQLite的解决方案,但对于那些需要在Objective-C中使用SQLite DB的人来说,他们可以在从SQLite DB获取后对数据数组进行排序。这是一个很好的解决方案:How to sort an NSMutableArray with custom objects in it?
答案 0 :(得分:2)
不幸的是,似乎没有直接解决方案。至少对于iOS。但是有很多方法可以效仿。
在订阅了SQLite的邮件列表后,用户名为Jean-Christophe Deschamps的回复是:
“在我的SQLite 3数据库中,我有一些土耳其字符的记录 例如“Ö”,“Ü”,“İ”等。当我用'SELECT * FROM选择我的值时 表单按COLUMN_NAME的查询顺序,以这些开头的记录 人物即将到来。“
裸骨SQLite仅在较低的ASCII字符集上正确整理。 虽然这对普通英语来说很好,但对我们大多数人来说并不适用。
“通常情况下,他们应该来到无点字母之后 每个版本。就像“Ö”在“O”之后,“Ü”在“U”之后。是吗 有关区域设置的事情?有没有办法控制这些 设置?“
您可以选择一些方法来使其正确或接近正确 为您的语言:
o)使用ICU作为扩展(对于第三方管理者)或 链接到 你的申请。 优点:它在每个语言中一次对于给定语言100%正确地工作 操作。 缺点:它是巨大而缓慢的,它需要你注册一个整理 你处理的每种语言。它也不适用于列 包含几种非英语语言。
o)编写自己的排序规则,调用您的OS'ICU例程 勘 字符串。 优点:不会使用庞大的库膨胀您的代码。 缺点:要求你写这个扩展(用C或其他东西),相同 ICU的其他缺点。
o)如果您使用Windows,请下载并使用中的功能 扩展我 写了一个接近正确的结果。 优点:它小,速度快,可以随时使用,它是语言 - 独立,但在许多语言中表现得相当不错 同一时间;它还提供了许多支持Unicode的功能 字符串操作函数(unaccenting或not)函数, 模糊搜索功能等等。来自C源代码 x86 DLL,可用于任何目的。 缺点:对于任何使用的语言,它可能无法100%正确地工作 不只是“香草英文字母”:你的无点我会整理 例如,沿着虚线i。这是一个很好的妥协 一种语言的绝对正确性和“公平”的正确性 大多数语言(包括一些使用变音符号的亚洲语言) 下载:http://dl.dropbox.com/u/26433628/unifuzz.zip
“我在Firefox中使用SQLite Manager来管理我的数据库。”
我的小扩展程序将适用于此。你可能也想 尝试内置ICU的SQLite Expert(至少在其Pro版本中) 和很多更多。
答案 1 :(得分:0)
可能是区域设置,但首先我要验证是否正在使用UTF-8编码。