dak ブログ

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

MySQL 8.0 でカタカナ・ひらがなを区別する COLLATE の設定

2024-01-03 13:23:30 | mysql
以前、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 |
+-----------+
| アイウ |
+-----------+



この記事についてブログを書く
« BigQuery でベクトルの長さを... | トップ | Elasticsearch で複数のフィ... »

mysql」カテゴリの最新記事