編輯:如果你在這裏是因爲你被MySQL中的波蘭語排序混淆,read this。強調不敏感的搜索/ utf8_general_ci排序問題
我試圖在波蘭城市的一張桌子上進行全文搜索,其中許多都包含重音字符。它意味着用於ajax調用自動完成,所以如果搜索不區分重音,它會很好。我已將行的排序規則設置爲ut8_polish_ci
。現在,鑑於城市「Zelów」,我查詢這樣的數據庫
SELECT * FROM
citiesWHERE MATCH(city) AGAINST ("zelow")
但無濟於事。 Mysql返回一個空的結果。我嘗試了不同的口音,嘗試在查詢中添加不同的排序規則,但沒有任何幫助。我不知道我應該如何處理這個問題,因爲口音敏感度似乎記錄不準確。有任何想法嗎?
編輯
所以我發現,不區分大小寫的全文搜索僅在布爾模式下進行,所以正確的查詢是
SELECT * FROM
citiesWHERE MATCH(city) AGAINST ("zelow" IN BOOLEAN MODE)
以前我不以爲然由於a misleading comment on dev.mysql.com。可能還有更多,但我現在只是很困惑。
無論如何,正如下面的評論中所提到的,我在城市專欄中使用了UNIQUE索引,因此將表格整理爲不區分重音的utf8_general_ci是不成問題的。然而
我意識到,下面的查詢工作的很好的一個表utf8_polish_ci歸類:
SELECT * FROM
citiesWHERE city LIKE 'zelow' COLLATE utf8_general_ci
它現在似乎是最合理的解決方案將是一個類似於做全文搜索時尚:
SELECT * FROM
citiesWHERE MATCH(city) AGAINST ('zelow' IN BOOLEAN MODE) COLLATE utf8_genral_ci
然而,這會產生以下錯誤:
#1253 - COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'binary'
這真的開始讓我神經緊張。還不如放棄全文搜索,取而代之的是簡單等,其中的做法,但它似乎並不明智表中的幾乎50K的記錄將被強烈質疑......
最後的編輯 好吧,布爾模式的事情是部分廢話。只是部分因爲它的確如我所說的那樣工作,但是,在utf8_general_ci上它反過來工作。我完全困惑,無法進一步研究這個問題。我決定放棄UNIQUE索引(無論如何不再增加更多的城市,因此不需要做大量的工作),並堅持使用utf8_general_ci表格歸類。我感謝所有的幫助,它讓我朝着正確的方向前進。
按照Vache的說法......我檢查了我的數據庫,排序規則是utf_general_ci。和一切按預期工作 – Cygnusx1