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