MySQLのキャラクタセット

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

MySQLで使用できるキャラクタセット(character set)の主要な種類は以下の通りである.

シフトJIS系ではcp932,EUC-JP系ではeucjpms,unicode系ではutf8が主要な選択肢となる.

これら3つの中からの選択は,使用環境や要件によって判断する必要がある.以下に選択時の重要な考慮点を示す.

  1. eucjpmsはJavaのキャラクタセットとの完全な互換性が保証されていないという制約がある.
  2. utf8はWeb環境との親和性が高く,特別な要件がない限り,MySQLレイヤーとWebなどの上位レイヤーで同一の文字コードを採用することが推奨される.

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

使用可能なキャラクタセット(character set)は,コマンドライン・クライアントで以下のコマンドを実行することで確認できる.

show character set;

を実行する

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

多数存在する使用可能なキャラクタセットの中から,実際に使用されているものを効率的に確認する方法を説明する.

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

    以下のSQLを実行する

    show variables like 'character_set%';
    
  2. collationの設定の確認

    以下のSQLを実行する

    show variables like 'collation%';
    
  3. exitで終了する

分析

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

サーバ文字コードセットの設定には以下の方法がある.

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

前述のとおり,character_set_client,character_set_connection,character_set_resultsの値はクライアントの種類によって異なる値を持つ.これらの値を総称して「クライアント文字コードセット」という.

クライアント文字コードセットは基本的にクライアントの種類ごとに異なる値を持つ.ただし,MySQL設定ファイルmysql.ini(またはmysql.cnf)の[mysqld]セクションにskip-character-set-client-handshakeを設定すると,クライアントの種類に関係なく,character_set_serverに設定された値がクライアント文字コードセットとして使用される.この機能をクライアント文字コードセット自動変換の解除という.

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

データベースダンプ時の文字コードセット自動変換機能を解除する場合は,default-character-setを「binary」に設定する必要がある.これは,データベースダンプ時の文字コードセット自動変換機能により,文字化けが発生しても検出が困難になる可能性があるためである.