無料Wikiサービス | デモページ
Linuxなどのメモ書き

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=utf8
MySQL5.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

最終更新 2011/10/09 19:54:44 - kztomita
(2006/05/08 20:14:46 作成)