金子邦彦研究室情報工学全般MySQL の利用MySQL のキャラクタセット

MySQL のキャラクタセット

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

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

シフト JIS 系なら cp932、 EUC-JP 系なら eucjpms、 unicode 系なら utf8 が有力な候補になる。

では、この3つのうち、どれにするかは、場合によって違う。 以下は,私の考え.

  1. eucjpms を選ぶと、eucjpms と Java のキャラクタセットは非完全互換(完璧ではない)、という問題あり。
  2. utf8 を選ぶと、Web との相性はいい(特別な理由が無い限り、MySQL層の漢字コードと、Webのような上位層の漢字コードを一致させるべき)。

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

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

show character set;

を実行する

[image]

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

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

  1. 現在開いているデータベースのキャラクタセットを確認する

    次のSQLを実行

    show variables like 'character_set%';
    

    [image]
  2. collation の設定の確認

    次のSQLを実行

    show variables like 'collation%';
    

    [image]
  3. exit で終了
    [image]

分析

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

サーバ文字コードセットの設定法はいくつかある.

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

上記に「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」に指定すること。 (データベースダンプ時の文字コードセット自動変換機能を使うことの欠点は、文字化けしているのに気づきにくい場合があるという問題)。