SQLite是否可以开箱即用地处理非英语语言环境?

时间:2010-04-19 11:35:35

标签: iphone sqlite

我注意到Google Toolbox for Mac用自己的版本替换了几个SQLite内置函数(LOWER / UPPER,LIKE,GLOB),这些函数可以更好地处理字符串语言环境。

所以,向拥有SQLite经验的每个人提问:你在SQLite中遇到过非英语语言环境的问题吗?是否真的需要做些什么才能正确处理非英文字母?如果按原样使用SQLite API,会出现什么样的问题?

(我将在iPhone上使用SQLite,但我想它在所有平台上都是一样的。我以前一直在使用Core Data而且从来没有遇到任何问题,但这次我想切换到非ORMed数据库访问。)

1 个答案:

答案 0 :(得分:1)

似乎SQLite根本不关心语言环境。我发现提到locales的唯一地方是datetime('now')的计算。但文档说它的行为取决于底层的C函数。它默认以unicode存储文本数据(在3.0以上的版本中),但是转换为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

  

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

     

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

three

  

SQLITE_ENABLE_ICU 此[编译]选项会将SQLite的International Components for Unicode或“ICU”扩展添加到构建中。


似乎你需要自己编译sqlite。