使用带有重音的LOCATE

时间:2012-07-13 19:16:34

标签: mysql

如何在比较中使用LOCATE忽略重音?例如:

SELECT LOCATE('a', 'João'); -- Fail
>> Currently: 0
>> Need:      3

SELECT LOCATE('ã', 'João'); -- Ok
>> Currently: 3
>> Need:      3

我怎么能这样做?我不能在这种情况下使用LIKE(它有效!)。

2 个答案:

答案 0 :(得分:3)

一个很好的解决方案是(基于Michael Mior的回答):

  SELECT LOCATE('a', CONVERT('João' USING latin1));

基准测试(Michael Mior方法):

  SET character_set_connection='latin1';
  SELECT LOCATE('a', 'João');
  >> 10.000.000 run at 0.532s

基准测试(当前方法):

  SELECT LOCATE('a', CONVERT('João' USING latin1));    
  >> 10.000.000 run at 1.906s

Michael Mior版本的速度提高了4倍。

答案 1 :(得分:1)

如果您使用latin1字符集,则会忽略某些重音符号。但是,这可能会对某些输入产生意外行为,因此请务必进行彻底测试。

SET character_set_connection='latin1';
SELECT LOCATE('a', 'João');