比較時にアクセントを無視して 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');