MySQL のキャラクタセット
【概要】
キャラクタセット(文字コードセット)は,文字をどのバイト列で表すかを定める設定である.本ページでは,MySQL で使える主要なキャラクタセットと,その確認方法・設定方法を説明する.
【目次】
- 使用可能なキャラクタセット
- 使用可能なキャラクタセットの確認法
- 実際に使用されているキャラクタセットの確認
- サーバ文字コードセットの設定法
- クライアント文字コードセット自動変換機能の解除
- データベースダンプ時の文字コードセット自動変換機能の解除
【サイト内の関連ページ】
使用可能なキャラクタセット
MySQL で使える主要なキャラクタセット(character set)は次のとおりである.
- シフトJIS系
sjis(Shift-JIS Japanese),cp932(Windows 用のSJIS.「Windows Code Page 932」の略)
- EUC-JP系
ujis(EUC-JP Japanese),eucjpms(Windows 用のUJIS)
- Unicode系
utf8mb4(4バイトまでのUTF-8.絵文字を含む全文字を表せる),utf8mb3(3バイトまでのUTF-8.基本多言語面のみ.非推奨),ucs2(UCS-2 Unicode)
かつて別名utf8はutf8mb3を指したが,この別名は非推奨である.現在は,
SHOW文やINFORMATION_SCHEMAでutf8mb3と表示される.新規のアプリケーションではutf8mb4を使うことが推奨される(utf8mb3 は将来のメジャーリリースで削除される見込み).
シフトJIS系ではcp932,EUC-JP系ではeucjpms,Unicode系ではutf8mb4が主要な選択肢となる.cp932 は,eucjpms と組み合わせたユーザ定義文字の変換に対応し,sjis/ujis で生じる変換上の問題を解消する.この3つからの選択は,使用環境や要件に応じて判断する.選択時の要点を次に示す.
- eucjpmsは,Java のキャラクタセットとの完全な互換性が保証されていないという制約がある.
- utf8mb4は Web との親和性が高い.特別な要件がない限り,MySQL 層と Web などの上位層で同じ文字コードをそろえることが推奨される.
使用可能なキャラクタセットの確認法
使用可能なキャラクタセットは,MySQL コマンドライン・クライアントで次のSQLを実行すると確認できる.
show character set;
実際に使用されているキャラクタセットの確認
多数あるキャラクタセットのうち,実際に使われているものを確認する方法を示す.
- 現在開いているデータベースのキャラクタセットの確認
次のSQLを実行する.
show variables like 'character_set%';
- 照合順序(collation)の設定の確認
次のSQLを実行する.
show variables like 'collation%';
- exit で終了する
確認結果の見方
- character_set_server,character_set_databaseは,MySQL のサーバ文字コードセットを定める設定変数である.
- character_set_client,character_set_connection,character_set_resultsは,クライアントの種類に応じて変わる値であり,異なる値が設定されている場合がある点に注意する.
サーバ文字コードセットの設定法
サーバ文字コードセットの設定には次の方法がある.
- MySQL 設定ファイル(my.iniまたはmy.cnf)の [mysqld] セクションと [mysql] セクションに,「default-character-set=cp932」のような設定行を追加する(「cp932」は使いたい文字コードセットの名称に置き換える).
- または,データベース生成時のオプションとして指定する.次の形式で指定できる.
CREATE DATABASE testdb DEFAULT CHARACTER SET cp932 COLLATE cp932_japanese_ci;
クライアント文字コードセット自動変換機能の解除
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」に設定する.これは,ダンプ時の自動変換によって文字化けが起きても検出しにくくなるのを避けるためである.