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

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

(Last modified: )

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

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

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

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

show collation where charset = 'utf8mb4';

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

CollationCharsetIdDefaultCompiledSortlen
utf8mb4_general_ciutf8mb445YesYes1
utf8mb4_binutf8mb446Yes1
utf8mb4_unicode_ciutf8mb4224Yes8
utf8mb4_icelandic_ciutf8mb4225Yes8
utf8mb4_latvian_ciutf8mb4226Yes8
utf8mb4_romanian_ciutf8mb4227Yes8
utf8mb4_slovenian_ciutf8mb4228Yes8
utf8mb4_polish_ciutf8mb4229Yes8
utf8mb4_estonian_ciutf8mb4230Yes8
utf8mb4_spanish_ciutf8mb4231Yes8
utf8mb4_swedish_ciutf8mb4232Yes8
utf8mb4_turkish_ciutf8mb4233Yes8
utf8mb4_czech_ciutf8mb4234Yes8
utf8mb4_danish_ciutf8mb4235Yes8
utf8mb4_lithuanian_ciutf8mb4236Yes8
utf8mb4_slovak_ciutf8mb4237Yes8
utf8mb4_spanish2_ciutf8mb4238Yes8
utf8mb4_roman_ciutf8mb4239Yes8
utf8mb4_persian_ciutf8mb4240Yes8
utf8mb4_esperanto_ciutf8mb4241Yes8
utf8mb4_hungarian_ciutf8mb4242Yes8
utf8mb4_sinhala_ciutf8mb4243Yes8
utf8mb4_german2_ciutf8mb4244Yes8
utf8mb4_croatian_mysql561_ciutf8mb4245Yes8
utf8mb4_unicode_520_ciutf8mb4246Yes8
utf8mb4_vietnamese_ciutf8mb4247Yes8
utf8mb4_croatian_ciutf8mb4608Yes8
utf8mb4_myanmar_ciutf8mb4609Yes8
utf8mb4_thai_520_w2utf8mb4610Yes4
utf8mb4_general_nopad_ciutf8mb41069Yes1
utf8mb4_nopad_binutf8mb41070Yes1
utf8mb4_unicode_nopad_ciutf8mb41248Yes8
utf8mb4_unicode_520_nopad_ciutf8mb41270Yes8

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

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

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

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

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

[mariadbd]
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_general_ci に設定されていることが確認できました。

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

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

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

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

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

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_general_ci が設定されました。

-- --

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

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。