2010-04-19 79 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