2013-02-13 23 views
3

我正在使用Phonegap爲iOS創建字典應用程序。SQLite命令通過在末尾放置變音符號和特殊字符

當查詢按字母順序排列的數據庫中,我使用COLLATE NOCASE

ORDER BY term COLLATE NOCASE ASC 

這解決了開頭小寫字母,其中追加到末尾方面的問題(把它撿起來,從that question)。

但是非標字符öäüéêè仍然可以在最後〜這裏整理2個例子:

Expected: Öffnungszeiten  Oberved: Zuzahlung 
       Zuzahlung     Öffnungszeiten 

(or)   clé       cliquer sur 
       cliquer sur     clé 

我環顧四周,發現了類似的問題討論herehere但似乎一般的建議是安裝一些

這個擴展或許可以幫你......

...擴展的類型使用ICU無論是作爲一個擴展

SQLite支持與ICU集成...

但我不知道這是否適用於我的情況下數據庫不是由自己主持,但客戶的設備上運行。所以我想我會推出這個擴展w /我的應用程序包。
我對iOS不是很熟悉,但我的感覺會很複雜 - 至少。

此外,在the official forum我發現提示:

SQLite does not properly handle accented characters. 

一點點在文本下來海報中提到的錯誤SQLite中。

所有的鏈接,我發現還沒有爲> = 1年,他們的非活躍似乎對付我目前在開發的移動環境。
所以我想知道是否有人找到了解決方案在他們的iOS項目。

的文檔指出他們只有3個默認排序選項:

6.0排序序列

當的SQLite比較兩個字符串,它使用一個相同的整理順序或 整理功能(兩句話東西)來確定哪個 字符串更大或兩個字符串是否相等。 SQLite有三個 內置的整理函數:BINARY,NOCASE和RTRIM。

BINARY - Compares string data using memcmp(), regardless of text encoding. 
NOCASE - The same as binary, except the 26 upper case characters of ASCII are folded to their lower case equivalents before the 

進行比較。請注意,只有ASCII字符是摺疊的情況下 。由於所需表的大小爲 ,SQLite不會嘗試執行完整的UTF大小寫摺疊。 RTRIM - 與二進制相同,但忽略尾隨空格字符。

現在我最好的猜測是在JavaScript中進行排序,但我懷疑這對整體性能沒有什麼好處。

+0

如何編譯SQLite到你的應用程序?你知道ICU是否包含在合併中?' – 2013-02-13 11:23:50

回答

1

原因是iOS上的SQLite沒有啓用ICU。所以你需要建立你自己的啓用ICU的SQLite版本+你自己的ICU版本作爲靜態lib +添加ICU .dat並使SQLite加載這個.dat文件。然後你可以通過一個簡單的SQL命令加載任何排序規則(即'icu_load_collat​​ion(「de_DE」,「DEUTSCH」)',在db打開後)

它不僅聽起來像是污垢的工作,是。試着找到一個已經完成的SQLite + ICU版本。

+0

你知道iOS 7是否已經默認ICU還是這個問題持續存在? – Kozuch 2014-06-19 11:18:05

+0

@benjist抱歉,接受答案。我認爲我們只是將bug標記爲不會修復並繼續前進。 :) – yoshi 2014-06-21 14:21:34

+0

@Kozuch快速谷歌搜索帶我去那裏http://stackoverflow.com/q/8126233/1063730它擁有一些信息如何建立自己的。正如我所提到的,我們沒有沿着這條路走下去,而且我也沒有iPhone可以和我一起工作了* *快樂的舞蹈* *但是爲什麼不在模擬器中試試它 - 現在可能已經修好了? – yoshi 2014-06-21 14:24:18