2014-01-26 24 views
0

有沒有什麼辦法可以寫select查詢where子句,忽略非拉丁字符?對非拉丁字符不敏感的SQL查詢?

例如,有立陶宛字符Ė,顯然在拉丁字符中的等價物將是E。那麼,有沒有反正我可以寫這樣的查詢:

SELECT * FROM `table` WHERE `keyword` LIKE %E%; 

而且我希望它返回包含這些字符的所有記錄:E,Ė,Ę,有沒有什麼辦法,我可以做到這一點與SQL自動(或甚至在PHP級別)?

回答

2

你不說你試過了什麼。你也不會說什麼字符集(utf-8)和整理你的table包含。那些是你默認控制這些東西的方法。

你可以試試這個:

SELECT * FROM `table` WHERE `keyword` COLLATE utf8_general_ci LIKE %E% 

或者這

SELECT * FROM `table` WHERE `keyword` COLLATE utf8_lithuanian_ci LIKE %E% 

我不知道,如果第二個會爲你想要的工作,因爲我不知道立陶宛。 E,Ė和Ę被認爲是字典中的同一個字母嗎?如果它們是而不是,那麼立陶宛的排序規則將不會與它們相互匹配。

如果您確實發現特定的排序規則有效,則可以更改列以默認使用該排序規則。

alter table `table` 
    change `keyword` `keyword` collate utf8_lithuanian_ci 

這是一個好主意,因爲那樣你就有了索引加快搜索速度的機會。

+0

說實話,我沒有嘗試任何東西,只是因爲我不知道甚至要嘗試什麼或者爲什麼要google。除了在PHP數組中使用char映射來解決某些問題。無論如何,您建議的第一個查詢似乎完全符合我的要求。非常感謝! – galdikas