2016-07-05 69 views
0

我希望能夠搜索「ae」並將「ae」和「Æ」作爲結果。我只是無法弄清楚如何去做。MYSQL,在搜索時有AE等於Æ

我嘗試整理爲utf8_german2_ci和utf8_general_ci。兩者都應該能夠從我讀的內容中做我想要的。但它不起作用。

在此先感謝。

+0

請提供有關您所嘗試的內容的更多詳細信息,因此至少包括其排序規則在內的表定義以及您嘗試使用的查詢(包括任何排序規則)。另外,如果你是從PHP那裏得到的,問題可能就在那裏。也許你試圖將這個字符的ANSI代表存儲爲一個UTF-8字符串左右。 – GolezTrol

+0

我嘗試了一系列不同的排序規則,包括utf8和拉丁語。都來自PHP並將列設置爲該排序規則。最後我發現我列出的那兩個應該工作。 (來源http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html) 目前我的列設置爲utf8_german2_ci。如果我使用 $ result = $ mysqli-> query(「SELECT Kaartnaam FROM Kaarten WHERE Kaartnaam LIKE'%ae%'COLLATE utf8_german2_ci」); 它只會導致AE結果。如果我刪除COLLATE(如果數據庫設置爲相同,我認爲它是多餘的),它也只顯示AE結果。 – Viz

+0

是否「從Kaarten中選擇十六進制('Æ'),十六進制(column_name);」顯示角色的值是C386? 「select * from information_schema.columns where table_name ='Kaarten';顯示該列的排序規則是utf8_german2_ci? –

回答

1

從您的評論(「剛剛嘗試。對兩者都是)」,我收集說明您的數據庫或連接沒有任何問題。你唯一的問題就是LIKE。 LIKE做一個「每字符」比較,MySQL手冊http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html有一個與您的案例非常相似的例子(使用「SELECT'ä'LIKE'ae'COLLATE latin1_german2_ci;」)。因此,您正在查看預期行爲,但可以說「從tj中選擇s1,hex(s1),其中s1類似'%ae%'或s1類似'%æ%';」。

+0

感謝您的回覆。至少我知道我必須找到一個解決方法,就像「 你的例子很容易,但需要弄清楚如何將這樣的東西整合到搜索腳本中,人們可以搜索任何東西。 我想if/else可以工作,但似乎是錯誤的。 – Viz