MySQL 文字コード関連
1. 現在の設定の確認
[使用できる文字コード一覧の確認]mysql> show character set;
[現在の文字コード設定の確認]
mysql> status <略> Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 <略>
表1 文字コードフィールドの意味
フィールド |
意味 |
---|---|
Server characterset |
サーバーのデフォルトキャラクタセット。 |
Db characterset |
デフォルトデータベース(use
xxxで選択したデータベース)で使用される文字コード。デフォルトデータベースがまだ選択されていない場合は、Server
charactersetと同じものが表示される。 |
Client characterset |
クライアントから送られてくるクエリの文字コードを指定。 |
Conn. characterset |
サーバーはクエリを受信した後に変換する文字コードを指定する。サーバーはクライアントから送られたクエリをClient charactersetからConn. charactersetに変換する。(introducerがない文字列に限る) |
詳細はこちら。
mysqlコマンドはシステム変数の値を取得して表示しているだけなので以下のようにしても取得できる。
mysq> SHOW VARIABLES; mysql> select @@character_set_client, @@character_set_connection, @@character_set_server, @@character_set_database;
2. 文字コードの設定
日本語を扱う場合には、サーバー側、クライアント側の文字コードを設定しておく必要がある。以下ではUTF-8に設定する例を示す。2.1 サーバの文字コード設定
以下のいずれかにより設定できる。1. configure&リコンパイル
# ./configure --with-character-set=utf8
を実行した後、リコンパイル。
2. デーモン起動時に引数で指定
# mysqld --default-character-set=utf8
3. /etc/my.cnfで設定
[mysqld] default-character-set=utf8
設定すると以下のようになる。
mysql> status <略> Server characterset: utf8 Db characterset: utf8 (*1) Client characterset: latin1 Conn. characterset: latin1 <略>
(*1)デフォルトデータベースを選択していないのでDb charactersetはServer
charactersetと同じものが表示されている。
2.2 クライアント(mysql)の文字コード設定
以下のいずれかにより設定可能。1. コマンド実行時に引数で指定
# mysql -u xxxx -p --default-character-set=latin1
2. /etc/my.cnfで指定
[mysql] default-character-set=utf8MySQL5.5ではdefault-character-setは使えなくなっている。代わりにcharacter-set-server=utf8を使う。
3. SQLで設定
SET NAMES utf8 or SET CHARACTER SET utf8
mysql> status; Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8
PHPやPerl等からMySQLにアクセスする場合は、MySQLへの接続後、
SET NAMES utf8 or SET CHARACTER SET utf8のSQLを実行して、クライアントから送信される SQL ステートメントのキャラクタセットと、サーバからクライアントに返される結果セットのキャラクタセットを指定する必要がある。
[追記]
/etc/my.cnfに以下の設定を入れておけば、接続後自動的にサーバー側の文字コードに合わせてくれるのでSET NAMES utf8をわざわざする必要はなくなる。
[mysqld] skip-character-set-client-handshake