MariaDB を利用する上で文字コードの設定は、
クライアント側で使用する文字コードの設定と
サーバ側でデータベースを作成した時のデフォルトの文字コードの設定がある。
正しい情報が設定されていれば、クライアント側とサーバ側で使用している文字コードが異なっていても問題はない。
現在の設定を確認するには、コマンドプロンプトから下記のコマンドを実行する。
show variables like "chara%";
設定ファイルを使った文字コードの設定方法
C:\Program Files\MariaDB 10.5\data 内にある 「my.ini」 ファイルを変更する。
クライアント側の設定は CLIENT SECTION [client]の中にある default-character-set で行う。
default-character-set=クライアント側で使用する文字コード
サーバ側の設定は SERVER SECTION [mysqld]の中にある character-set-server で行う。
my.ini ファイルの設定を変更した場合は、 MySQL サーバを再起動して新しい設定ファイルを読み込みなおす必要がある。
クライアント側に関する文字コード
クライアント側に関する文字コードの設定は、クライアント側で使用している文字コードが何を使っているのかを設定する。
MariaDB サーバ側ではクライアントから送信されてきた SQL 文などをクライアント側で使用している文字コードを使って変換する。
クライアント側に関係する項目は次の 3 つ。
クライアント文字コード
character_set_client
クライアントからSQL文などが送信される時に使用される文字コード。
character_set_connection
クライアント側から受け取った文字を変換する文字コード。
character_set_results
クライアントへ結果を送信する時に使用される文字コード。
すべて cp932 が設定されているが、cp932 は Shift_JIS を拡張した文字コードで Windows で使用されている文字コード。
character_set_client cp932
character_set_connection cp932
character_set_results cp932
コマンドプロンプトで使用される文字コードではデフォルトで cp932 となっているため、この設定で問題ない。
サーバ側に関する文字コード
サーバ側に関する文字コードの設定は、データベースを作成した時に使用されるデフォルトの文字コードを設定する。
サーバ側に関係する項目は次の 3 つ。
サーバ文字コード
character_set_database
デフォルトデータベースで使用される文字コード。USE コマンドでデータベースに接続するたびに変更される。
character_set_server
データベース作成時にデフォルトで使用される文字コード。
character_set_system
システムで使用する文字コード。
現在はどちらも utf8 が設定されている。 utf8mb4 を設定した場合、 MariaDB で 4 バイトの UTF-8 の文字を扱えるようになる。
character_set_database utf8
character_set_server utf8
なお character_set_database は現在接続しているデータベースの文字コードを返すだけで、データベースに接続していないときは character_set_server と同じ値を返す。
データベース作成時にデフォルトで使用される文字コードが latin1 などになっていると文字化けの原因となる。
MySQLで設定可能な文字コードの一覧
MySQL で設定可能な文字コードの一覧は、 MySQL モニタから次のように実行することで取得できる。
show character set;