mysql 8.0 でカタカナ、ひらがなを区別して検索する方法のメモ。
mysql 8.0 で、varchar のカラムをひらがなで検索すると、
同じ読みののカタカナ文字列も検索されてしまいました。
以下のように varchar のカラムにひらがなの文字列、カタカナの文字列を登録します。
そして、ひらがな、カタカナで検索すると、以下のような結果となります。
varchar のカラムでは、ひらがなとカタカナを区別せずに検索していることがわかります。
これはこれでありがたい場合がありますが、区別したい場合には binary 属性をつけて varchar カラムを定義します。
ひらがな、カタカナで検索すると文字種を区別した結果が得られます。
mysql 8.0 で、varchar のカラムをひらがなで検索すると、
同じ読みののカタカナ文字列も検索されてしまいました。
以下のように varchar のカラムにひらがなの文字列、カタカナの文字列を登録します。
create table test1 ( a varchar(128) not null default '', b varchar(128) not null default '', primary key(a, b) ); replace into test1 set a = 'あいう', b = '123'; replace into test1 set a = 'アイウ', b = '456';
そして、ひらがな、カタカナで検索すると、以下のような結果となります。
mysql> select * from test1 where a = 'あいう'; +-----------+-----+ | a | b | +-----------+-----+ | あいう | 123 | | アイウ | 456 | +-----------+-----+ mysql> select * from test1 where a = 'アイウ'; +-----------+-----+ | a | b | +-----------+-----+ | あいう | 123 | | アイウ | 456 | +-----------+-----+
varchar のカラムでは、ひらがなとカタカナを区別せずに検索していることがわかります。
これはこれでありがたい場合がありますが、区別したい場合には binary 属性をつけて varchar カラムを定義します。
create table test2 ( a varchar(128) binary not null default '', b varchar(128) binary not null default '', primary key(a, b) ); replace into test2 set a = 'あいう', b = '123'; replace into test2 set a = 'アイウ', b = '456';
ひらがな、カタカナで検索すると文字種を区別した結果が得られます。
mysql> select * from test2 where a = 'あいう'; +-----------+-----+ | a | b | +-----------+-----+ | あいう | 123 | +-----------+-----+ mysql> select * from test2 where a = 'アイウ'; +-----------+-----+ | a | b | +-----------+-----+ | アイウ | 456 | +-----------+-----+