私のパソコン雑記帖
|
トップページに戻る |
|
|
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 に問い合わせたり、ネットで検索したり、試行錯誤を重ねること数度。結果として、
- XREA のアドバイスによると、文字コードは ・サーバー ・データベース ・クライアント のセットで考えなければならないとのこと。当該サーバー(XREA)の標準は utf-8。
- データベースの文字コードは、管理画面のデータベース「作成」から指定する。しかし仮に euc-jp を指定しても phpMyAdmin の最初の画面で、"MySQL の文字セット: UTF-8 Unicode (utf8)" という表示が現れ困惑してしまいます。どうもこれは、上記サーバーの標準設定を指しているらしい。データベースの文字コードを意味するのは"照合順序"というものらしい。utf-8 の場合は"utf8_general_ci" がおすすめらしい。ちなみに euc-jp の場合は "ujis_japanese_ci" とのこと、これまた紛らわしい。要するに全てにおいて MySQL 4 の時と違って、言っていることが単刀直入ではないのです。
- さて次はクライアントすなわち、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 になっていました。
|
|