2011-11-03 153 views
1

我有一個Mysql數據庫(在utf8_general_ci中)並且必須查詢包含特殊字符的列。問題是:包含特殊字符的查詢不會檢索任何結果 - 但包含這些字符的常規版本的查詢會執行。UTF8數據庫查詢和特殊字符

舉例來說,如果我要查詢單詞「ETE」:

  • SELECT ... WHERE LIKE%ETE%列將無法正常工作。
  • SELECT ... WHERE column LIKE%ete%將工作!

這個問題必須是由於我的編碼(兩個查詢都直接在phpMyAdmin中完成)。

我使用PDO,並按照這裏的指令(http://stackoverflow.com/questions/279170/utf-8-all-the-way-through)和連接到數據庫時,執行exec(「SET CHARACTER SET utf8「)和exec(」SET collat​​ion_connection ='utf8_general_ci'「)。令我困擾的是,除了這個搜索查詢之外,該網站對於顯示和數據庫似乎都可以很好地與utf8一起工作。

我認爲我可以對包含特殊字符的字符串進行transliterate_to_ascii操作。然而,我擔心這個選項並不理想,特別是對於非歐洲語言。 非常感謝您的幫助!

+1

後立即運行mysql的SET NAMES utf8;顯示你正在使用 –

+0

@Pekka用於查詢的代碼:SELECT * FROM翻譯WHERE translations.content例如:SEARCH_TERMS + $查詢 - > bindParam(': search_terms',$ search_terms) – Raphael

+1

顯示您用於查詢的完整代碼 –

回答

0

請嘗試連接

+0

謝謝埃德森,我試過了,但還不夠 – Raphael

+0

好的問題是,爲了運行查詢,我在搜索條件中應用了strtolower,並用LOWER()轉換了mysql列的內容。這似乎截斷了特殊字符,並解釋了爲什麼查詢只適用於常規字符。 – Raphael

+1

您需要更改字段的排序規則 –