トップページ -> インストール,設定,利用 -> 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) は下記の通り

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

[image]

評価結果は下記の通り.

[image]

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

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

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%';」の実行

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

    [image]

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

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

    [image]

    分析


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

    サーバ文字コードセットの設定法はいくつかあります.最も簡単な方法は、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」に指定すること。 (データベースダンプ時の文字コードセット自動変換機能を使うことの欠点は、文字化けしているのに気づかない、ということです)。


本サイトのサイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]