文字セットとは、記号とエンコーディングのセットです。 照合順序とは、文字セット内の文字を比較するためのルールを集めたものです。
サーバー文字セットおよび照合順序は、データベース文字セットおよび照合順序が CREATE DATABASE ステートメントで指定されていない場合にデフォルト値として使用されます。 これらにほかの用途はありません。
現在のサーバー文字セットおよび照合順序は、character_set_server および collation_server システム変数の値で判別できます。 これらの変数は実行時に変更できます。
show variables like '%_server%';
+---------------------------------+-----------------+
| Variable_name | Value |
+---------------------------------+-----------------+
| aurora_server_id | orthrus-rds |
| character_set_server | utf8 | <-----
| collation_server | utf8_general_ci | <-----
| innodb_ft_server_stopword_table | |
+---------------------------------+-----------------+
デフォルトのデータベースに対する文字セットと照合順序は、character_set_database および collation_database システム変数の値から判別できます。 デフォルトのデータベースが変わるたびに、サーバーはこれらの変数を設定します。 デフォルトのデータベースがない場合、変数は、character_set_server および collation_server という対応するサーバーレベルのシステム変数と同値になります。
show variables like '%_database%';
+------------------------+-----------------+
| Variable_name | Value |
+------------------------+-----------------+
| character_set_database | utf8 | <-----
| collation_database | utf8_general_ci | <-----
| skip_show_database | OFF |
+------------------------+-----------------+
character_set_databaseとcharacter_set_serverの違い【MySQL】
collation_connection は character_set_client, character_set_results, character_set_connection の値によって自動で設定される。 my.cnfでは設定できない。 collation_connectionをmy.cnfに設定するとエラーで起動できない。
ref. https://dev.mysql.com/doc/refman/8.0/ja/charset-connection.html
その他の文字セットおよび照合順序システム変数は、クライアントとサーバー間の接続のトラフィックの処理に関わっています。 すべてのクライアントには、セッション固有の接続関連の文字セットおよび照合順序システム変数があります。 これらのセッションシステム変数値は接続時に初期化されますが、セッション内で変更できます。
文字セットおよび照合順序( Collation )を設定する。
例は文字セットを utf8mb4
を設定する。
# my.cnf
[mysqld]
# 必須
character_set_server=utf8mb4
collation_server=utf8mb4_0900_ai_ci
# 以下は念のため設定
character_set_client=utf8mb4
character_set_connection=utf8mb4
character_set_database=utf8mb4
character_set_results=utf8mb4
[client]
default-character-set=utf8mb4
※ character_set_client、character_set_connection、character_set_database、character_set_results はデフォルトで utf8mb4 。念の為に設定しておくと安心。
※ 文字セットの照合順序を表す collation_server=utf8mb4_0900_ai_ci
を設定する。
※ mysqld コマンドのオプションとして指定するときは character_set_server は character-set-server とハイフンになる(逆に言うと my.cnf で指定する場合は character_set_server とアンダースコアを使用する)。
上記 my.cnf の character
関連の設定値。
show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
照合順序関連の設定値。
show variables like '%collation%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_bin |
| collation_server | utf8mb4_bin |
+----------------------+--------------------+