2010-04-19 45 views
1

我注意到,Google Toolbox for Mac有自己版本的处理字符串的语言环境更好的替代多个SQLite的内置功能(/下限,比如,GLOB)。SQLite是否处理非英文语言环境?

所以,问题大家谁拥有SQLite的经验:你有过在SQLite的非英语语言环境的任何问题?是否真的需要做一些事情来正确处理非英文字母?如果我按原样使用SQLite API,会出现什么样的问题?我想在iPhone上使用SQLite,但我想在所有平台上都是一样的,以前我一直在使用Core Data,从来没有遇到过任何问题,但是这次我想切换到非易失性存储器, ORMed DB访问。)

+0

我更新了我的答案。 – newtover 2010-04-22 09:07:34

回答

1

似乎SQLite不关心区域的。我发现提到有关语言环境的唯一地方是计算datetime('now')。但文档说它的行为取决于底层的C函数。它在默认情况下(在3.0以上的版本中)以unicode存储文本数据,但转换为unicode是客户端库的责任。

顺便说一句,MS Windows下的SQLite控制台是当你切换控制台代码页为UTF-8作为预期仍然有效罕见的控制台应用程序之一。

UPD

从SQLite的cocumentation一些引文:

one

当SQLite的比较两个字符串,它采用了整理顺序或排序功能(两个字对于相同东西)来确定哪个字符串更大或两个字符串是否相等。 SQLite有三个内置的整理函数:BINARY,NOCASE和RTRIM。

  • BINARY - 使用memcmp()比较字符串数据,而不考虑文本编码。
  • NOCASE - 执行比较之前同为二进制,除ASCII的26个大写字符被折叠到其下壳体当量。请注意,只有ASCII字符是大小写的。由于所需表的大小,SQLite不会尝试执行完整的UTF大小写折叠。
  • RTRIM - 与二进制相同,但忽略尾随空格字符。

应用程序可以使用sqlite3_create_collat​​ion()接口注册附加的整理函数。

two

下(X)下(X)函数返回字符串X的所有ASCII字符的副本转换为小写。默认的内置lower()函数仅适用于ASCII字符。要对非ASCII字符进行大小写转换,请加载ICU扩展。

upper(X) upper(X)函数返回输入字符串X的一个副本,其中所有小写ASCII字符都转换为其大写等效项。

three

SQLITE_ENABLE_ICU此[汇编]选项导致International Components for Unicode或 “ICU” 扩展的SQLite被添加到构建。


好像在无论哪种方式,你需要自己编译源码。

+0

谢谢。但是我的问题仍然存在:鉴于这种情况,如果我仅仅使用SQLite,比如UTF-8编码的数据,我应该期待什么样的惊喜? – 2010-04-21 22:06:44

+0

非常感谢。我认为你的答案归结为两件事:(1)不区分大小写的比较/过滤;(2)没有正确的排序。 (Wrt SQLITE_ENABLE_ICU:我看到了App Store中的拒绝提及,因为定制的ICU中的符号与他们的自动扫描工具寻找的一些被禁止的符号相匹配。因此,用ICU构建自定义SQLite似乎是许多痛苦的秘诀即使它没有违反协议。) – 2010-04-22 19:41:49

+0

...所以我想我们得出的结论是:谷歌工具包的Mac有一个很好的理由来取代SQLite的字符串函数与自定义的,我们最好使用它。再次感谢您的帮助。 – 2010-04-22 19:44:25