MySQL (MariaDB) で文字化けを起こすと言った話をよく聞く。だが、多くの問題は設定の間違いや文字コードに関する誤解が殆どであると断言できる。つまづく前の杖として、知っておくと良い話題を紹介しよう。

 

MariaDB は MySQL から派生したモノですので、同様の設定が利用可能です。

 

 

MySQL の文字コード設定

まずは次の図をみて欲しい。

 

MySQL のキャラクタセット参照順

 

これは、文字コードの参照順を表した図である。

ご存知だっただろうか? 文字コードを指定できる箇所が4ヶ所もあるのだ。それぞれついて説明しておこう。

 

MySQLにおける文字コード(キャラクタセット)の参照順 対象
対象 説明
MySQL デーモン サーバーやデーモンと呼ばれる部分。名称は mysqld。デフォルトの文字コードは latin1。文字コードは my.cnf で指定を行う。
データベース データベースの作成時に文字コードを指定しなかった場合は、MySQL デーモンの文字コードが使用される。
テーブル テーブルの作成時に文字コードを指定しなかった場合は、データベースの文字コードが使用される。
フィールド フィールドの作成時に文字コードを指定しなかった場合は、テーブルの文字コードが使用される。だが、フィールドに文字コードを指定するのはお勧めできない

 

これらの文字コード(キャラクタセット)指定は、サーバー側に関するものだが、ユニコード系(UTF-8など)を指定するのが良いだろう。内部的に文字コードの変換はユニコードを経由する事が多く、安心して使えるからである。間違っても Shift-JIS 系は指定すべきではない。一般的なプログラマーの多くは文字コードに関して正確な知識を有している事は稀で、文字化けの原因になりやすいからだ。

 

※ どうしても Shift-JIS 系を指定したい場合は、最低、この記事には目を通しておくべきだ。(日本語オンラインマニュアルは公開中止になった様です。このページから 5.1 の日本語マニュアルならダウンロード出来ます。Shift-JIS に関する記述は「9.10.7.1 cp932のキャラクタセット」をご覧ください。)

 

 

サーバーとクライアント

まずは次の図を見てもらいたい。

 

MySQL のキャラクタセット変換

 

通常、データベースにアクセスする場合は、コマンド(コマンド一覧) や API を使用して行われる。

 

コマンドで使用する文字コードはコマンドオプションか my.cnf で指定を行う。

 

※ 当然、文字コードはそのコマンドが存在するマシンのOSと同じにするのが望ましい。( Linux→ UTF-8、Mac OSX → UTF-8、日本語 Windows Xp → CP932 など)

 

API に対して文字コードを指定する場合は、パラメータで指定するのが一般的である。 my.cnf で指定する場合は、[client] で指定。

 

※ 日本語 Windows Xp などで指定する場合は、CP932を使用する。
※ PHPで使用する場合は、注意が必要である。PHPはサーバー側で動いているからだ。 文字コードの指定は、HTMLの文字コードと合わせると良いだろう。

 

 

mysql コマンドでの確認(MariaDB も mysql コマンドを利用する)

キャラクタセットの確認

 

show variables like 'character_set%';
show variables like 'collation_%';

 

データベースの確認

 

show create database データベース名;

 

テーブルの確認

 

use データベース名;
show table status;

 

 

MySQL Workbench での確認

 

  • Query タブで上記のSQLコマンドを実行する(稲妻アイコンで実行)
  • SCHEMASで表示されているデータベースを右クリックし、『Alter Schema…』で確認
  • テーブルを表示させ、『Alter table…』で確認

 

MySQL Workbench でキャラクタセットの確認

 

MySQL Workbench Community では、少し異なっています。

 

MySQL Workbench community 6.2 でのテーブル情報取得

 

※ ここでは、MySQL Workbench 及び、 MySQL Workbench Community での操作方法について説明しています。入手方法はコチラを参考にして下さい。