MySQL(MariaDB) と日本語
MySQL (MariaDB) で文字化けを起こすと言った話をよく聞く。だが、多くの問題は設定の間違いや文字コードに関する誤解が殆どであると断言できる。つまづく前の杖として、知っておくと良い話題を紹介しよう。
※ MariaDB は MySQL から派生したモノですので、同様の設定が利用可能です。
MySQL の文字コード設定
まずは次の図をみて欲しい。
これは、文字コードの参照順を表した図である。
ご存知だっただろうか? 文字コードを指定できる箇所が4ヶ所もあるのだ。それぞれついて説明しておこう。
対象 | 説明 |
---|---|
MySQL デーモン | サーバーやデーモンと呼ばれる部分。名称は mysqld。デフォルトの文字コードは latin1。文字コードは my.cnf で指定を行う。 |
データベース | データベースの作成時に文字コードを指定しなかった場合は、MySQL デーモンの文字コードが使用される。 |
テーブル | テーブルの作成時に文字コードを指定しなかった場合は、データベースの文字コードが使用される。 |
フィールド | フィールドの作成時に文字コードを指定しなかった場合は、テーブルの文字コードが使用される。だが、フィールドに文字コードを指定するのはお勧めできない。 |
これらの文字コード(キャラクタセット)指定は、サーバー側に関するものだが、ユニコード系(UTF-8など)を指定するのが良いだろう。内部的に文字コードの変換はユニコードを経由する事が多く、安心して使えるからである。間違っても Shift-JIS 系は指定すべきではない。一般的なプログラマーの多くは文字コードに関して正確な知識を有している事は稀で、文字化けの原因になりやすいからだ。
※ どうしても Shift-JIS 系を指定したい場合は、最低、この記事には目を通しておくべきだ。(日本語オンラインマニュアルは公開中止になった様です。このページから 5.1 の日本語マニュアルならダウンロード出来ます。Shift-JIS に関する記述は「9.10.7.1 cp932のキャラクタセット」をご覧ください。)
サーバーとクライアント
まずは次の図を見てもらいたい。
通常、データベースにアクセスする場合は、コマンド(コマンド一覧) や 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 ‘collation_%’;
データベースの確認
テーブルの確認
show table status;
MySQL Workbench での確認
- Query タブで上記のSQLコマンドを実行する(稲妻アイコンで実行)
- SCHEMASで表示されているデータベースを右クリックし、『Alter Schema…』で確認
- テーブルを表示させ、『Alter table…』で確認
MySQL Workbench Community では、少し異なっています。
※ ここでは、MySQL Workbench 及び、 MySQL Workbench Community での操作方法について説明しています。入手方法はコチラを参考にして下さい。