よく忘れるので。
これはmysqlクライアント(WEBサーバー側)の話です。
mysqlサーバー(DBサーバー側)の話ではないです。
単語について
ステートメント:クエリ(DML)やDDLなどの総称
クライアントのcharset、サーバーのcharset
-
クライアント
:ステートメント送信、DBサーバーに到達したステートメントの解釈、DBサーバーが返す結果 -
サーバー
:データベースやテーブルを作成する際のデフォルト値。webサーバーからDMLを発行する際には関係なく、DDLを発行する際に考慮するもの。
例えば2台のwebサーバーの文字コードが違う場合、クライアント
はそれぞれのサーバーに合わせてwebサーバー単位(もしくはセッション単位)で設定する。
一方データベースやテーブルのデフォルト値であるサーバー
は、どのwebサーバーからでも同じ値が指定されておくべきもの。
ステートメントでの設定確認
show variables like "chara%";
注:
この確認方法は、そのクライアント(もしくはセッション)における設定値の確認。
クライアントAからと、クライアントBからでは、それぞれの設定に従った結果が返る。
クライアント
-
character_set_client
クライアントがステートメントを送信する際の文字セット。 -
character_set_connection
サーバーが、クライアントから送信されたステートメントをこの文字セットに変換する。 -
character_set_results
サーバーが、クライアントにクエリー結果を返信するときに使用する文字セット。
これには、カラム値などの結果データと、カラム名やエラーメッセージなどの結果メタデータが含まれます。
サーバー
-
character_set_database
デフォルトデータベースで使用される文字セット。デフォルトデータベースが存在しない場合、変数は character_set_server と同じ値になります。 -
character_set_server
データベース作成時にデフォルトで使用される文字コード。
設定ファイル my.conf
linuxではmy.conf。windowsではmy.ini
ファイルの場所の確認方法
mysql --help | grep my.cnf
設定方法
[mysql]
# character_set_client
# character_set_connection
# character_set_results
default-character-set=utf-8
# character_set_database
# character_set_server
character-set-server=utf-8
クエリによる動的な指定方法
クエリで指定することで、セッション単位で指定ができる。
SET NAMES utf8
- character_set_client
- character_set_connection
- character_set_results
SET CHARACTER SET utf8
- character_set_client
- character_set_results