2014-01-26 26 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