2011年5月18日水曜日

MySQLの"skip-character-set-client-handshake"の挙動

スズキです。

RDSで"skip-character-set-client-handshake"が有効かどうか確認するために、
改めて"skip-character-set-client-handshake"の挙動を確認してみました。

ちなみに"skip-character-set-client-handshake"は、クライアントが指定した文字コード
を無視し、サーバの文字コードを設定するオプションです。

まずは、こんな"/etc/my.cnf"でMySQLの起動します。
※"character-set-client-handshake"は"skip-character-set-client-handshake"が
無効であることをはっきりさせるために、あえて記述しています。

[mysqld]
character-set-server=utf8
character-set-client-handshake

そして、文字コードを指定してMySQLに接続すると下記のようになり、
クライアントが指定した文字コードが反映されていることが確認できます。

# mysql --default-character-set=sjis;
mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | sjis   |
| character_set_connection | sjis   |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | sjis   |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+

次に、こんな"/etc/my.cnf"でMySQLの起動しなおします。
※"skip-character-set-client-handshake"を追加しています。

[mysqld]
character-set-server=utf8
character-set-client-handshake
skip-character-set-client-handshake

そして、文字コードを指定してMySQLに接続すると下記のようになり、
クライアントが指定した文字コードが無視され、
サーバの文字コードが反映されていることが確認できます。

# mysql --default-character-set=sjis;
mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | utf8   |
| character_set_connection | utf8   |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | utf8   |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+

"skip-character-set-client-handshake"は"show variables"で取れなかった...
--------
http://www.suz-lab.com

0 コメント: