dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

mysql 8.0 でカタカナ、ひらがなを区別して検索する方法

2021-10-18 21:00:10 | mysql
mysql 8.0 でカタカナ、ひらがなを区別して検索する方法のメモ。
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 |
+-----------+-----+


この記事についてブログを書く
« Node.js のプログラムの単体... | トップ | proxy 経由での kibana の公開 »

mysql」カテゴリの最新記事