以前、MySQL 8.0 でカタカナ、ひらがなを区別して検索できるようにするために、以下のブログで varchar binary の検証を行いました。
「mysql 8.0 でカタカナ、ひらがなを区別して検索する方法」
今回は COLLATE で、ひらがな・カタカナを区別する方法の検証を行います。
COLLATE が utf8mb4_0900_ai_ci の場合、ひらがなとカタカナを区別しません。
COLLATE が utf8mb4_ja_0900_as_cs_ks の場合には、ひらがなとカタカナを区別することができます。
alter database でデータベースの COLLATE を utf8mb4_ja_0900_as_cs_ks に変更します。
テーブルを作成し、ひらがな・カタカナの文字列を登録します。
以下のように、ひらがなとカタカナを区別して検索することができます。
mysql> select * from test1 where str = 'あいう';
+-----------+
| str |
+-----------+
| あいう |
+-----------+
mysql> select * from test1 where str = 'アイウ';
+-----------+
| str |
+-----------+
| アイウ |
+-----------+
「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 |
+-----------+
| アイウ |
+-----------+