2012-07-27 25 views
-1

我有一個MySQL數據庫編碼爲UTF-8,其中包含英文和匈牙利文。MySQL的確切搜索也是外國字符

我工作的一個搜索功能,其結果是,除了一兩件事可以接受的:

上包含字符串搜索「A」,「E」,「I」,「O」,「O」, 「ő」,「ú」,「ü」,「ű」會導致它們的所有發生,但也會顯示「a」,「e」,「i」,「o」,「u」的結果。這樣搜索就不會精確,因爲它會產生大量不需要的記錄,例如,我們得到了「bár」的所有「bar」(顯然不一樣)。

我通過像一個簡單的方式進行搜索(儘管它擁有全詞搜索只或確切詞序許多變化,基本是一樣的):

SELECT * FROM table WHERE coloumn LIKE 'word' 

哪有我逃避了不想要的結果?我不是SQL專家,從來沒有這樣的搜索,所以我需要一點幫助...

謝謝!

+0

你應該看看[這個問題](http://stackoverflow.com/questions/9518681/which-mysql-collat​​ion-compares-ege-and-e-as-equal)(如果你還沒有) 。它不包含解決方案,但它可能仍然有幫助。 – Vatev 2012-07-27 18:35:42

+0

我看了一遍,似乎在所有的排序規則中提到的字符是相同的(á= a,é= e等)。 有人在這個問題上提到這個[鏈接](http://dev.mysql.com/doc/refman/5.0/en/adding-collat​​ion.html)。增加的整理是否會成爲解決方案? – PrincessOfSecret 2012-07-27 18:48:37

回答

0

不能確定這會工作,但你可以嘗試使用

CAST(value1 AS BINARY) = CAST(value2 AS BINARY) 

做一個直接的比較和

POSITION(CAST(value1 as BINARY) IN CAST(value2 as BINARY)) 

檢查,如果數值1值2的子字符串。
MySQL不會爲它們使用索引,因此您應該使用那些與您的正常WHERE並列的索引。

+0

看來我只用CAST就能得到想要的結果: 'SELECT * FROM table其中coloumn LIKE CAST('word'AS BINARY)' 它只找到所需的出現,所以現在很好。 謝謝! – PrincessOfSecret 2012-07-28 11:08:49