概要
MariaDB/MySQLのサーバー設定の文字コードと照合順のデフォルトはそれぞれ以下になっています (Server System Variables – MariaDB Knowledge Base)。
- character-set-server = latin1
- collation_server = latin1_swedish_ci
パッケージマネージャーなどでインストールすると、上記はutf8mb4/utf8mb4_general_ciになったりしてたりします。
この設定は使用する文字や、SQLでのソートなどで重要な意味があります。
そして、この文字コードと照合順はDB単位でも設定が可能です。つまり、管理者権限の使えない共用サーバー・レンタルサーバーでも設定可能です。
今回は詳細の解説を省略しますが、基本的には常にutf8mb4/utf8mb4_binを使ったほうがよいです。utf8mb4_general_ciは英字の大小を区別しませんが、utf8mb4_binは区別するからです。
毎回MySQL/MariaDBのDB設定時にこの設定が必要になり、個別に説明するのが冗長になるため、この記事で設定と確認方法を記載しておいて、この投稿を参照するようにします。
設定
指定したDBの文字コード・照合順の情報は以下のコマンド・SQLで確認可能です。
DB_USER=root
DB_NAME=mysql
mysql -u $DB_USER -p -e \
'SELECT SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA;'
+--------------------+----------------------------+------------------------+ | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +--------------------+----------------------------+------------------------+ | information_schema | utf8 | utf8_general_ci | | performance_schema | utf8 | utf8_general_ci | | mysql | utf8mb4 | utf8mb4_general_ci | +--------------------+----------------------------+------------------------+
設定は以下で行えます。
DB_USER=root
DB_NAME=mysql
mysql -u $DB_USER -p -e \
"ALTER DATABASE \`$DB_NAME\` DEFAULT CHARACTER SET 'utf8mb4' DEFAULT COLLATE 'utf8mb4_bin';"
最初の確認コマンドで変更を確認できます。
+--------------------+----------------------------+------------------------+ | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +--------------------+----------------------------+------------------------+ | information_schema | utf8 | utf8_general_ci | | performance_schema | utf8 | utf8_general_ci | | mysql | utf8mb4 | utf8mb4_bin | +--------------------+----------------------------+------------------------+
これで設定完了です。基本コマンドは以上ですが、必要に応じてsudoを前置して管理者権限で実行したり、-pのパスワード入力オプションを外して実行します。
結論
MariaDBのDBの文字コード・照合順の設定方法でした。
MariaDB/MySQLは過去に文字コード周りで問題があり、未だにデフォルトの設定はそのまま使うには問題があることが多いです。
基本的に新規DB使用時には毎回この設定が必要に思います。個別のインストール記事で上記の設定反映確認の説明を毎回書くのが冗長なので、今後はこの記事を参照して、設定コマンドだけを掲載するようにします。

詳細プロフィール。SNS: Twitter/[email protected]/[email protected]。2022-07-17からgnusocial.jpとweb.gnusocial.jpのサイトを運営しています。WordPressで分散SNSに参加しています。このアカウントの投稿に返信すると、サイトのコメント欄にも反映されます。自称ASD。
Comments
This Article was mentioned on web.gnusocial.jp