如何在比较时使用 LOCATE 忽略重音?例如:
SELECT LOCATE('a', 'João'); -- Fail
>> Currently: 0
>> Need: 3
SELECT LOCATE('ã', 'João'); -- Ok
>> Currently: 3
>> Need: 3
我怎么能这样做?我不能在这种情况下使用 LIKE (它有效!)。
如何在比较时使用 LOCATE 忽略重音?例如:
SELECT LOCATE('a', 'João'); -- Fail
>> Currently: 0
>> Need: 3
SELECT LOCATE('ã', 'João'); -- Ok
>> Currently: 3
>> Need: 3
我怎么能这样做?我不能在这种情况下使用 LIKE (它有效!)。
一个好的解决方案是(基于 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 倍。
如果您使用latin1
字符集,某些重音符号将被忽略。但是,这可能会对某些输入产生意外行为,因此请务必彻底测试。
SET character_set_connection='latin1';
SELECT LOCATE('a', 'João');