照合順序に関する設定を記述する

MySQL で設定ファイルに対して文字コードに関する設定を行った場合に、設定した文字コードに対するデフォルトの照合順序を設定することができます。明示的に指定しない場合は、文字コード毎に決まっている照合順序が使用されます。ここでは MySQL で設定ファイルにデフォルトの文字コードの設定を行った場合に、その文字コードに対するデフォルトの照合順序に関する設定を記述する方法について解説します。

(Last modified: )

utf8mb4に対するデフォルトの照合順序を確認する

現在 MySQL のサーバで使用する文字コードは utf8mb4 に設定しています。まずは utf8mb4 のデフォルトの照合順序を確認します。 MySQL コマンドラインツールを起動してください。

utf8mb4に対するデフォルトの照合順序を確認する(1)

文字コード utf8mb4 で用意されている照合順序の一覧を取得します。次のようにコマンドを実行してください。

show collation where charset = 'utf8mb4';

utf8mb4に対するデフォルトの照合順序を確認する(2)

CollationCharsetIdDefaultCompiledSortlenPad_attribute
utf8mb4_0900_ai_ciutf8mb4255YesYes0NO PAD
utf8mb4_0900_as_ciutf8mb4305Yes0NO PAD
utf8mb4_0900_as_csutf8mb4278Yes0NO PAD
utf8mb4_0900_binutf8mb4309Yes1NO PAD
utf8mb4_binutf8mb4 46Yes1PAD SPACE
utf8mb4_croatian_ciutf8mb4245Yes8PAD SPACE
utf8mb4_cs_0900_ai_ciutf8mb4266Yes0NO PAD
utf8mb4_cs_0900_as_csutf8mb4289Yes0NO PAD
utf8mb4_czech_ciutf8mb4234Yes8PAD SPACE
utf8mb4_danish_ciutf8mb4235Yes8PAD SPACE
utf8mb4_da_0900_ai_ciutf8mb4267Yes0NO PAD
utf8mb4_da_0900_as_csutf8mb4290Yes0NO PAD
utf8mb4_de_pb_0900_ai_ciutf8mb4256Yes0NO PAD
utf8mb4_de_pb_0900_as_csutf8mb4279Yes0NO PAD
utf8mb4_eo_0900_ai_ciutf8mb4273Yes0NO PAD
utf8mb4_eo_0900_as_csutf8mb4296Yes0NO PAD
utf8mb4_esperanto_ciutf8mb4241Yes8PAD SPACE
utf8mb4_estonian_ciutf8mb4230Yes8PAD SPACE
utf8mb4_es_0900_ai_ciutf8mb4263Yes0NO PAD
utf8mb4_es_0900_as_csutf8mb4286Yes0NO PAD
utf8mb4_es_trad_0900_ai_ciutf8mb4270Yes0NO PAD
utf8mb4_es_trad_0900_as_csutf8mb4293Yes0NO PAD
utf8mb4_et_0900_ai_ciutf8mb4262Yes0NO PAD
utf8mb4_et_0900_as_csutf8mb4285Yes0NO PAD
utf8mb4_general_ciutf8mb445Yes1PAD SPACE
utf8mb4_german2_ciutf8mb4244Yes8PAD SPACE
utf8mb4_hr_0900_ai_ciutf8mb4275Yes0NO PAD
utf8mb4_hr_0900_as_csutf8mb4298Yes0NO PAD
utf8mb4_hungarian_ciutf8mb4242Yes8PAD SPACE
utf8mb4_hu_0900_ai_ciutf8mb4274Yes0NO PAD
utf8mb4_hu_0900_as_csutf8mb4297Yes0NO PAD
utf8mb4_icelandic_ciutf8mb4225Yes8PAD SPACE
utf8mb4_is_0900_ai_ciutf8mb4257Yes0NO PAD
utf8mb4_is_0900_as_csutf8mb4280Yes0NO PAD
utf8mb4_ja_0900_as_csutf8mb4303Yes0NO PAD
utf8mb4_ja_0900_as_cs_ksutf8mb4304Yes24NO PAD
utf8mb4_latvian_ciutf8mb4226Yes8PAD SPACE
utf8mb4_la_0900_ai_ciutf8mb4271Yes0NO PAD
utf8mb4_la_0900_as_csutf8mb4294Yes0NO PAD
utf8mb4_lithuanian_ciutf8mb4236Yes8PAD SPACE
utf8mb4_lt_0900_ai_ciutf8mb4268Yes0NO PAD
utf8mb4_lt_0900_as_csutf8mb4291Yes0NO PAD
utf8mb4_lv_0900_ai_ciutf8mb4258Yes0NO PAD
utf8mb4_lv_0900_as_csutf8mb4281Yes0NO PAD
utf8mb4_persian_ciutf8mb4240Yes8PAD SPACE
utf8mb4_pl_0900_ai_ciutf8mb4261Yes0NO PAD
utf8mb4_pl_0900_as_csutf8mb4284Yes0NO PAD
utf8mb4_polish_ciutf8mb4229Yes8PAD SPACE
utf8mb4_romanian_ciutf8mb4227Yes8PAD SPACE
utf8mb4_roman_ciutf8mb4239Yes8PAD SPACE
utf8mb4_ro_0900_ai_ciutf8mb4259Yes0NO PAD
utf8mb4_ro_0900_as_csutf8mb4282Yes0NO PAD
utf8mb4_ru_0900_ai_ciutf8mb4306Yes0NO PAD
utf8mb4_ru_0900_as_csutf8mb4307Yes0NO PAD
utf8mb4_sinhala_ciutf8mb4243Yes8PAD SPACE
utf8mb4_sk_0900_ai_ciutf8mb4269Yes0NO PAD
utf8mb4_sk_0900_as_csutf8mb4292Yes0NO PAD
utf8mb4_slovak_ciutf8mb4237Yes8PAD SPACE
utf8mb4_slovenian_ciutf8mb4228Yes8PAD SPACE
utf8mb4_sl_0900_ai_ciutf8mb4260Yes0NO PAD
utf8mb4_sl_0900_as_csutf8mb4283Yes0NO PAD
utf8mb4_spanish2_ciutf8mb4238Yes8PAD SPACE
utf8mb4_spanish_ciutf8mb4231Yes8PAD SPACE
utf8mb4_sv_0900_ai_ciutf8mb4264Yes0NO PAD
utf8mb4_sv_0900_as_csutf8mb4287Yes0NO PAD
utf8mb4_swedish_ciutf8mb4232Yes8PAD SPACE
utf8mb4_tr_0900_ai_ciutf8mb4265Yes0NO PAD
utf8mb4_tr_0900_as_csutf8mb4288Yes0NO PAD
utf8mb4_turkish_ciutf8mb4233Yes8PAD SPACE
utf8mb4_unicode_520_ciutf8mb4246Yes8PAD SPACE
utf8mb4_unicode_ciutf8mb4224Yes8PAD SPACE
utf8mb4_vietnamese_ciutf8mb4247Yes8PAD SPACE
utf8mb4_vi_0900_ai_ciutf8mb4277Yes0NO PAD
utf8mb4_vi_0900_as_csutf8mb4300Yes0NO PAD
utf8mb4_zh_0900_as_csutf8mb4308Yes0NO PAD

文字コード utf8mb4 に対するデフォルトの照合順序は utf8mb4_0900_ai_ci になっています。

デフォルトの照合順序が使用されるか確認する

MySQL のデフォルトの照合順序については設定ファイルである my.ini ファイルで設定します。 [mysql] グループで collation-server に対して値を設定します。

[mysqld]
character-set-server=文字コード
collation-server=照合順序

現在 my.ini ファイルでは character-set-server=utf8mb4 は設定されていますが collation-server については何も設定されていません。そのため、デフォルトの照合順序は utf8mb4_0900_ai_ci となります。

[mysqld]
character-set-server=utf8mb4

データベースを作成するとき、明示的に文字セットと照合順序を指定した場合はその文字セットと照合順序が使用されます。文字セットだけを指定した場合は、その文字セットに対するデフォルトの照合順序が my.ini の設定に関わらず使用されます(例えば文字セットが utf8mb4 の場合、照合順序は collation-server の設定に関係なく必ず utf8mb4_0900_ai_ci になります)。文字セットと照合順序を両方とも省略した場合、 my.ini で設定したデフォルトの文字セットとデフォルトの照合順序が使用されます。

それでは実際にデータベースを作成してみます。作成するときに文字セットおよび照合順序は指定しません。

create database mytest;

デフォルトの照合順序が使用されるか確認する(1)

作成したデータベースの文字セットと照合順序を確認します。

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mytest';

デフォルトの照合順序が使用されるか確認する(2)

文字セットが utf8mb4 、照合順序が utf8mb4_0900_ai_ci に設定されていることが確認できました。

デフォルトの照合順序を変更する

それでは my.ini に設定を追加してデフォルトの文字セットを変更します。 my.ini ファイルの [mysqld] グループの中の collation-server オプションに対する値を utf8mb4_bin に変更してください。

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin

設定ファイルを保存し、 MySQL サーバを再起動してください。これで設定変更は完了です。

それでは文字セットと照合順序を指定せずにデータベースを作成します。

create database mytest;

デフォルトの照合順序を変更する(1)

作成したデータベースの文字セットと照合順序を確認します。

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mytest';

デフォルトの照合順序を変更する(2)

データベースの照合順序が my.ini でデフォルトの照合順序として設定した utf8mb4_bin に設定されていることが確認できました。

データベース作成時に文字コードだけ指定した場合

なおデータベースを作成するときに文字コードだけ設定した場合は、 my.ini でその文字コードに対するデフォルトの照合順序が設定されていても使用されず、文字コードに対する元々のデフォルトの照合順序が設定されますのでご注意ください。実際に my.ini で collation-server=utf8mb4_bin が設定されている状態で文字コードだけを指定してデータベースを作成してみます。

create database mytest character set utf8mb4;

データベース作成時に文字コードだけ指定した場合(1)

作成したデータベースの文字セットと照合順序を確認します。

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mytest';

データベース作成時に文字コードだけ指定した場合(2)

データベースの照合順序が my.ini で設定したデフォルトの照合順序とは異なり、文字コード utf8mb4 の本来のでデフォルト照合順序である utf8mb4_0900_ai_ci が設定されました。

-- --

MySQL で設定ファイルにデフォルトの文字コードの設定を行った場合に、その文字コードに対するデフォルトの照合順序に関する設定を記述する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。