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