MySQL(MariaDB) と日本語

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 での操作方法について説明しています。入手方法はコチラを参考にして下さい。

コメントを残す

メールアドレスが公開されることはありません。