我注意到Google Toolbox for Mac用自己的版本替换了几个SQLite内置函数(LOWER / UPPER,LIKE,GLOB),这些函数可以更好地处理字符串语言环境。
所以,向拥有SQLite经验的每个人提问:你在SQLite中遇到过非英语语言环境的问题吗?是否真的需要做些什么才能正确处理非英文字母?如果按原样使用SQLite API,会出现什么样的问题?
(我将在iPhone上使用SQLite,但我想它在所有平台上都是一样的。我以前一直在使用Core Data而且从来没有遇到任何问题,但这次我想切换到非ORMed数据库访问。)
答案 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_collation()接口注册其他整理函数。
two:
lower(X) lower(X)函数返回字符串X的副本,所有ASCII字符都转换为小写。默认的内置lower()函数仅适用于ASCII字符。要对非ASCII字符进行大小写转换,请加载ICU扩展名。
upper(X) upper(X)函数返回输入字符串X的副本,其中所有小写ASCII字符都转换为大写的等效字符。
SQLITE_ENABLE_ICU 此[编译]选项会将SQLite的International Components for Unicode或“ICU”扩展添加到构建中。
似乎你需要自己编译sqlite。