MySQL 照合順序設定による検索結果の違い(1)
- 2021年5月27日
- 技術情報
今回はデータベースを作成する際の照合順序設定によってどのように検索結果に影響を与えるかをシェアしたいと思います。
データベースの作成と照合順序の設定
新規にデータベースを作成する場合、下図のようにデータベースの名称を決定すると同時に「照合順序」をどれにするかプルダウンにて選択する必要があります。
下図の例(phpMyAdmin)では「utf8_general_ci」が「照合順序」として選択されています。

文字コードはマルチリンガルに対応した「utf8」を選択することが一般的ですが、「照合順序」の選択の違いにより検索結果に差異はでるのでしょうか。
今回は「照合順序」に「utf8_general_ci」を選択した場合と、「utf8_unicode_ci」を選択した場合について調べてみたいと思います。
今回検証用に以下の2つのデータベースを作成しました。
- データベース名: u8gen(utf8_general_ci)
- データベース名: u8uni(utf8_unicode_ci)
テスト用テーブルの作成
それぞれのデータベースにテスト用のテーブルの作成をおこないます。
データベース: u8gen に作成するテーブル
CREATE TABLE `test` (
`name` varchar(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
データベース: u8uni に作成するテーブル
CREATE TABLE `test` (
`name` varchar(128) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
上記それぞれのテストテーブルに検索結果の比較検証用に以下のダミーレコードの流し込みをおこないます。
INSERT INTO `test` (`name`) VALUES ('にしだ');
INSERT INTO `test` (`name`) VALUES ('ニシダ');
INSERT INTO `test` (`name`) VALUES ('ニシダ');
INSERT INTO `test` (`name`) VALUES ('nishida');
INSERT INTO `test` (`name`) VALUES ('NISHIDA');
各テーブルでレコードのINSERTがおこなわれていることを確認します。
u8genで確認:

u8uniで確認:

次回は上記のレコードを使用して照合順序設定による検索結果の違いについて
確認をおこなっていきたいと思います。
木曜日担当:nishida
nishida at 2021年05月27日 10:00:08