以前、MySQL 8.0 でカタカナ、ひらがなを区別して検索できるようにするために、以下のブログで varchar binary の検証を行いました。
「
mysql 8.0 でカタカナ、ひらがなを区別して検索する方法」
今回は COLLATE で、ひらがな・カタカナを区別する方法の検証を行います。
COLLATE が utf8mb4_0900_ai_ci の場合、ひらがなとカタカナを区別しません。
mysql> select @@collation_database;
+----------------------+
| @@collation_database |
+----------------------+
| utf8mb4_0900_ai_ci |
+----------------------+
mysql> select strcmp('あいう', 'アイウ');
+----------------------------------+
| strcmp('あいう', 'アイウ') |
+----------------------------------+
| 0 |
+----------------------------------+
COLLATE が utf8mb4_ja_0900_as_cs_ks の場合には、ひらがなとカタカナを区別することができます。
mysql> select strcmp('あいう' collate utf8mb4_ja_0900_as_cs_ks, 'アイウ' collate utf8mb4_ja_0900_as_cs_ks);
+----------------------------------------------------------------------------------------------------+
| strcmp('あいう' collate utf8mb4_ja_0900_as_cs_ks, 'アイウ' collate utf8mb4_ja_0900_as_cs_ks) |
+----------------------------------------------------------------------------------------------------+
| -1 |
+----------------------------------------------------------------------------------------------------+
alter database でデータベースの COLLATE を utf8mb4_ja_0900_as_cs_ks に変更します。
mysql> alter database collate 'utf8mb4_ja_0900_as_cs_ks';
Query OK, 1 row affected (0.01 sec)
mysql> select @@collation_database;
+--------------------------+
| @@collation_database |
+--------------------------+
| utf8mb4_ja_0900_as_cs_ks |
+--------------------------+
テーブルを作成し、ひらがな・カタカナの文字列を登録します。
mysql> create table test1 ( str varchar(8) );
Query OK, 0 rows affected (0.04 sec)
mysql> insert into test1 values ('あいう'), ('アイウ');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
以下のように、ひらがなとカタカナを区別して検索することができます。
mysql> select * from test1 where str = 'あいう';
+-----------+
| str |
+-----------+
| あいう |
+-----------+
mysql> select * from test1 where str = 'アイウ';
+-----------+
| str |
+-----------+
| アイウ |
+-----------+