似乎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