MySQL のキャラクタセット

概要

キャラクタセット(文字コードセット)は,文字をどのバイト列で表すかを定める設定である.本ページでは,MySQL で使える主要なキャラクタセットと,その確認方法・設定方法を説明する.

目次

【サイト内の関連ページ】

MySQL 活用ガイド

使用可能なキャラクタセット

MySQL で使える主要なキャラクタセット(character set)は次のとおりである.

シフトJIS系ではcp932,EUC-JP系ではeucjpms,Unicode系ではutf8mb4が主要な選択肢となる.cp932 は,eucjpms と組み合わせたユーザ定義文字の変換に対応し,sjis/ujis で生じる変換上の問題を解消する.この3つからの選択は,使用環境や要件に応じて判断する.選択時の要点を次に示す.

  1. eucjpmsは,Java のキャラクタセットとの完全な互換性が保証されていないという制約がある.
  2. utf8mb4は Web との親和性が高い.特別な要件がない限り,MySQL 層と Web などの上位層で同じ文字コードをそろえることが推奨される.

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

使用可能なキャラクタセットは,MySQL コマンドライン・クライアントで次のSQLを実行すると確認できる.

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 設定ファイル(my.ini または my.cnf)の [mysqld] セクションにskip-character-set-client-handshakeを設定すると,クライアントの種類に関係なく,character_set_server の値がクライアント文字コードセットとして使われる.これをクライアント文字コードセット自動変換の解除という.

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

データベースダンプ時の文字コードセット自動変換を解除する場合は,default-character-set を「binary」に設定する.これは,ダンプ時の自動変換によって文字化けが起きても検出しにくくなるのを避けるためである.