My開発メモ

MySQLクライアント接続時の文字コード

MySQLでの文字コードの設定をどうすべきかについて、ネットで調べるとたいてい UTF-8 にするようにと書かれていることが多い。

しかし実際には、たとえば XAMPP をインストールしたら、その状態の設定で特に変更する必要もないだろう。

XAMPPをインストールした時点では、設定ファイルは次のようになっている。

my.ini

[client]
default-character-set=utf8mb4

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

この状態で Windowsのコマンドプロンプトで接続し、文字コードを確認すると、以下のようになる。

MariaDB [(none)]> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | cp932                          |
| character_set_connection | cp932                          |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | cp932                          |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

ところが、> chcp 65001 と、コマンドプロンプトの文字コードを UTF-8 にして、文字コードを確認すると、

MariaDB [(none)]> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8                           |
| character_set_connection | utf8                           |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8                           |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

となる。

このことについては、MySQLのマニュアルには、次のように書かれている。

MySQL5.6 マニュアル 10.1.4 接続文字セットおよび照合順序


クライアントはサーバーに接続するときに、使用する文字セットの名前を送信します。サーバーはこの名前を使 用して、character_set_client、character_set_results、および character_set_connection システム変数を設定しま す。実際には、サーバーは文字セット名を使用して SET NAMES 操作を実行します。

mysql クライアントの場合、デフォルトとは別の文字セットを使用するには、起動するたびに、SET NAMES を 明示的に実行できます。


MySQL5.6 リファレンスマニュアル」グローバリゼーション — 文字セットのサポート — 接続文字セットおよび照合順序

MySQL5.6 マニュアル 13.7.4 SET構文


SET NAMES は、3 つのセッションシステム変数 “”character_set_client、character_set_connection、および character_set_results を指定された文字セットに設定します。character_set_connection を charset_name に 設定すると、collation_connection も charset_name のデフォルトの照合順序に設定されます。オプションの COLLATE 句を使用すると、照合順序を明示的に指定できます。セクション10.1.4「接続文字セットおよび照合 順序」を参照してください。


MySQL5.6 リファレンスマニュアル」SQLステートメントの構文 — データベース管理ステートメント — SET構文

カテゴリー: memo, mysql

タグ: character, cp932, mysql, utf-8

カウント: 194