トップページ -> 実践知識 -> Apache, MySQL, PHP, phpMyAdmin のインストールと各種ツールの使用法 -> MySQL 漢字コード
[サイトマップへ], サイト内検索:

MySQL 漢字コード

サイト構成 連絡先,業績など 実践知識 コンピュータ 教材 サポートページ

使用可能なキャラクタセット(character set)

MySQL が扱えるキャラクタセット(character set)は,次のような種類がある.

シフト JIS 系なら cp932、 EUC-JP 系なら eucjpms、 unicode 系なら utf8 が有力な候補になる。 (特別な事情が無い限り、他は忘れてしまってよい)。

では、この3つのうち、どれにするかは、場合によって違う。 散発的に書くと、

  1. eucjpms を選ぶと、eucjpms と Java のキャラクタセットは非完全互換(完璧ではない)、という問題あり。
  2. utf8 を選ぶと、Web との相性はいい(特別な理由が無い限り、MySQL層の漢字コードと、Webのような上位層の漢字コードを一致させるべき)けれど、コマンドライン・クライアント が動かない。
  3. cp932 を選ぶと、phpMyAdmin など PHP 系のアプリを動かすのが面倒(かも知れない)(調べきっていないので、済みません)。

散発的な意見だけでは仕方がないので、以下、事実をいくつか連ねておきます.


使用可能なキャラクタセット(character set)の確認法

使用可能なキャラクタセット(character set)を確認するには, phpMyAdminコマンドライン・クライアント を使って,

show character set;

を実行する

phpMyAdmin での実行画面 (MySQL バージョン 5.1) は下記の通り

コマンドを入力したところ.

評価結果は下記の通り.


使用されるキャラクタセットの確認

使用可能なキャラクタセットはたくさんありますが、そのうちどれが、実際に使用されているか、簡単に確認できます.

phpmyadmin を使う場合

  1. phpmyadmin を使ってログイン(phpmyadmin の使用法は別の Web ページに記述している)

  2. phpmyadmin で,データベースを選択

    ここでは, 「CREATE DATABASE 'testdb' DEFAULT CHARACTER SET cp932 COLLATE cp932_japanese_ci;」 を実行して作成したデータベース(データベース名 testdb)を選択する.

  3. SQL文「show variables like 'character_set%';」の実行

  4. SQL文「show variables like 'collation%';」の実行

コマンドラインクライアントを使う場合

コマンドライン・クライアント を使って,簡単に確認できます. 上記の phpmyadmin と同じ手順をなぞると,次のようなる.

分析


サーバ文字コードセットの設定法

サーバ文字コードセットの設定法はいくつかあります.最も簡単な方法は、mysql.ini (または mysql.cnf) という名前が付いた MySQL 設定ファイルの [mysqld] 部分と [mysql] 部分に、 「default-charactser-set=cp932」のような行を書くこと。(「cp932」の部分は、使いたい文字コードセットの名前)

※ サーバ文字コードセットとは別の話で、データベースごとに文字コードセットを変えたい場合があります. そのときは、CREATE DATABSE でのデータベース生成で、文字コードセットを指定します.

CREATE DATABASE `test9` DEFAULT CHARACTER SET cp932 COLLATE cp932_japanese_ci

クライアント文字コードセット自動変換機能の解除

上記に「character_set_client, haracter_set_connection, haracter_set_results の値は、クライアントの種類ごとに変わる値」と書きました。 この値のことを、「クライアント文字コードセット」と呼んだりします.

クライアント文字コードセットは、クライアントの種類ごとに違う値です.これが基本。 ところが、(ややこしいことに)、MySQL の設定ファイル mysql.ini (または mysql.cnf) の [mysqld] 部分に、 skip-character-set-client-handshake の値を設定すると、 クライアント文字コードセットとして、character_set_server に設定された値が(クライアントの種類に関係なく)使用されるようになる. これを、クライアント文字コードセット自動変換の解除といいます. 文字化けの原因の解明のときなどに役立つかも知れません。


データベースダンプ時の文字コードセット自動変換機能の解除

データベースダンプ時の文字コードセット自動変換機能を解除したいときは、 default-character-set は「binary」に指定すること。 (データベースダンプ時の文字コードセット自動変換機能を使うことの欠点は、文字化けしているのに気づかない、ということです)。