似乎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_collation()接口注册附加的整理函数。
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被添加到构建。
好像在无论哪种方式,你需要自己编译源码。
我更新了我的答案。 – newtover 2010-04-22 09:07:34