1
如何在比较时使用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(并且它工作正常!)。
如果您使用latin1
字符集,某些重音符号将被忽略。但是,这可能会对某些输入有意想不到的行为,因此请务必彻底测试。
SET character_set_connection='latin1';
SELECT LOCATE('a', 'João');
一个好的解决方案是,(基于迈克尔Mior回答):
SELECT LOCATE('a', CONVERT('João' USING latin1));
标杆(迈克尔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次更快。
我可以使用COLLATE方法吗? – 2012-07-13 23:07:53
我不相信有一个UTF-8排序规则可以做你想做的事情。如果不转换UTF-8数据,你不能使用latin1排序规则。 – 2012-07-14 00:44:44
另请注意,您可能需要在运行此查询后重置字符集,因为它将在连接的生命周期中生效。 – 2012-07-14 00:45:34