私のパソコン雑記帖

MySQL の文字コードセッティング (XREA での実施例)

カテゴリー: PHP
14Jan2008

MySQL Version 4

それまで XREA のサーバーを選ぶ時は、できるだけ MySQL Version 4 がサポートされているサーバーを選ぶようにしていました。それは MySQL 4 の文字コードセッティングに慣れてしまい、そこから脱却するのが億劫だったからです。


MySQL Version 5

しかしサーバーを切替えることになり、MySQL Version 5.1.20、PHP 5.2.3 を使うことになりました。またその機に、HTML や PHP の文字コードと、MySQL の文字コードを utf-8 に統一することにしました。euc-jp でもよかったのですが、IE でソースを見た時文字化けするのがなにかと不便でした(Firefox だったら文字化けがありませんが・・・)。

早速とまどったのが MySQL の文字コードセッティングです。phpMyAdmin の設定方法が従来と違ってよく訳がわからないのです。

XREA に問い合わせたり、ネットで検索したり、試行錯誤を重ねること数度。結果として、

  1. XREA のアドバイスによると、文字コードは ・サーバー ・データベース ・クライアント のセットで考えなければならないとのこと。当該サーバー(XREA)の標準は utf-8。

  2. データベースの文字コードは、管理画面のデータベース「作成」から指定する。しかし仮に euc-jp を指定しても phpMyAdmin の最初の画面で、"MySQL の文字セット: UTF-8 Unicode (utf8)" という表示が現れ困惑してしまいます。どうもこれは、上記サーバーの標準設定を指しているらしい。データベースの文字コードを意味するのは"照合順序"というものらしい。utf-8 の場合は"utf8_general_ci" がおすすめらしい。ちなみに euc-jp の場合は "ujis_japanese_ci" とのこと、これまた紛らわしい。要するに全てにおいて MySQL 4 の時と違って、言っていることが単刀直入ではないのです。

  3. さて次はクライアントすなわち、PHP などデータベースに接続し操作する側の文字コード。XREA から
    "MySQL5の場合は、自動的に判断され変換されますが、誤認識されることもありますので、基本的にはクライアント側で設定するのが望ましいです。これは、SQLコマンド set names で変更できます。"
    とのアドバイスがあった。 確かに、charset や mb_internal_encoding で指定していても不十分で、例えばクライアント側は正しく表示されていても phpMyAdmin で MySQL の中身を見ると文字化けして見えたり。この問題は確かに set names で解決することができました。

set names の使用実例

$db=@mysql_connect("localhost", $dbName, $passWord);
if (!$db) {
print "データベース接続エラー";
exit;
}
mysql_query('SET NAMES utf8', $db); // ujis for euc-jp、 sjis for shift_jis



コメント


【riok】  2011年05月30日 10時13分

あらためて XREA のサーバー仕様を見てみましたが、MySQL4 がまだまだ使われています。多分 version4 から切り替える余裕の無いサイトが多いということでしょう。
Coreserver の方はさすがに全て MySQL5 になっていました。