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

Adsense

MySQL 文字コード関連 の差分
Rev.17→Rev.18  追加箇所 削除箇所



1. 現在の設定の確認

[使用できる文字コード一覧の確認]

mysql> show character set;


[現在の文字コード設定の確認]

mysql> status
     <>
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
     <>
<>
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
<>


表1 文字コードフィールドの意味
フィールド
意味
Server
characterset
サーバーのデフォルトキャラクタセット。
Db
characterset
デフォルトデータベース(usexxxで選択したデータベース)で使用される文字コード。デフォルトデータベースがまだ選択されていない場合は、Servercharactersetと同じものが表示される。
Client
characterset
クライアントから送られてくるクエリの文字コードを指定。
Conn.
characterset
サーバーはクエリを受信した後に変換する文字コードを指定する。サーバーはクライアントから送られたクエリをClient charactersetからConn. charactersetに変換する。(introducerがない文字列に限る)
フィールド
意味
Server
characterset
サーバーのデフォルトキャラクタセット。
Db
characterset
デフォルトデータベース(usexxxで選択したデータベース)で使用される文字コード。デフォルトデータベースがまだ選択されていない場合は、Servercharactersetと同じものが表示される。
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;


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
default-character-set=utf8



設定すると以下のようになる。

mysql> status
     <>
Server characterset:    utf8
Db     characterset:    utf8   (*1)
Client characterset:    latin1
Conn.  characterset:    latin1
     <>
<>
Server characterset: utf8
Db characterset: utf8 (*1)
Client characterset: latin1
Conn. characterset: latin1
<>

(*1)デフォルトデータベースを選択していないのでDb charactersetはServercharactersetと同じものが表示されている。

2.2 クライアント(mysql)の文字コード設定

以下のいずれかにより設定可能。

1. コマンド実行時に引数で指定

# mysql -u xxxx -p --default-character-set=latin1


2. /etc/my.cnfで指定

[mysql]
default-character-set=utf8
default-character-set=utf8



3. SQLで設定

SET NAMES utf8
 or
SET CHARACTER SET utf8
or
SET CHARACTER SET utf8


設定すると以下のようになる。

mysql> status;
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8



PHPやPerl等からMySQLにアクセスする場合は、MySQLへの接続後、

SET NAMES utf8
or
SET CHARACTER SET utf8
or
SET CHARACTER SET utf8

のSQLを実行して、クライアントから送信される SQLステートメントのキャラクタセットと、サーバからクライアントに返される結果セットのキャラクタセットを指定する必要がある。

[追記]
/etc/my.cnf以下設定れておけば接続後自動的サーバー文字コードわせてくれるのでSET NAMES utf8をわざわざする必要はなくなる

[mysqld]
skip-character-set-client-handshake