1

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

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

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

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

4

2 回答 2

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 倍。

于 2012-07-13T23:51:49.020 回答
1

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

SET character_set_connection='latin1';
SELECT LOCATE('a', 'João');
于 2012-07-13T21:15:02.230 回答