編集3:OK、以下のすべての複雑なものを忘れてしまいます。私の質問は、このように簡単です:次の結果の2番目の列は0に設定されているのはなぜ他のすべての列が1MySQLのINSTRと照合
SELECT 'a' = 'á',
INSTR('András','Andras'),
'András' LIKE 'Andras',
INSTR('András','Andräs')
ありながら、データベースとの接続がUTF8に設定されています。
終了編集
私はMySQLのINSTR機能に問題があります。私は、照合utf8_general_ciと値 'AndrásSchiff'を含むVARCHAR列 'value'を持つテーブル 'values'を持っています。今、私は次のクエリを実行:
> SET NAMES 'utf8' COLLATE 'utf8_general_ci'
> SELECT 'a' = 'á';
1
> SELECT * FROM values WHERE value LIKE '%Andras%'
'András'
> SELECT * FROM values WHERE INSTR(value,'Andras')
(Empty)
> SELECT * FROM values WHERE INSTR(value,'Andräs')
'András'
を誰もがこの奇妙な振る舞いを説明できますか?私はLIKE '%...%'とINSTRは同等で、後者は検索文字列に '%'が含まれるという利点があると考えました。
おかげ
EDIT:もう一つは、私は気づいた:按分5.1.54 14.14 Verは、readlineの6.2
EDIT 2を使用して、Debian-のlinux-gnuの(x86_64版)のための私のMySQLのバージョンがある
> SELECT * FROM values WHERE INSTR(value,'Andras') COLLATE 'utf8_unicode_ci'
は、「COLLATION 'utf8_unicode_ci'はCHARACTER SET 'バイナリ'」には無効です。しかし、私はキャラクタセットがなぜバイナリであるべきか理解していません。
strが 'E' またはが含まれている場合、[INSTRは(STR、SUBSTR) "動作しないのが重複する可能性'とsubstrのみ "e"](http://stackoverflow.com/questions/20923186/instrstr-substr-does-not-work-when-str-contains-e-or-e-and-substr-only- e) – Ben