MySQL5.0 に EUC-JP な環境を構築してみる。

MySQL5.0をUTF-8で使っているときに、EUC-JPのデータを投入して、
PHP5からEUC-JPを表示させるためには、そのままではうまく行かない。

MySQLの環境(my.cnf, version 5.0.22)

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake

PHP5 環境(php.ini, version 5.2.6)

[mbstring]
; 全てデフォルト。つまり、以下の通り。
Directive Local Value Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.internal_encoding no value no value
mbstring.language neutral neutral
mbstring.script_encoding no value no value
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

データベース作成

データベースを作成する場合には、EUC-JP(ujis)で作成すること。

$ cat init.sql
CREATE DATABASE IF NOT EXISTS データベース名 DEFAULT CHARACTER SET ujis;
GRANT ALL PRIVILEGES ON データベース名.* TO ユーザ名@localhost
 IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
$ mysql -u root
mysql> use mysql;
mysql> source init.sql;

mysqldumpからのデータ追加

ダンプファイルにujisの項目を追加する。具体的には、
1. 先頭に、ujis設定関連の追加。
2. create table文にujisの設定を追加。
を行う。

$ cat foobar.sql
-- 先頭に以下を追加。
-- Server version ....

set names ujis;
set character_set_database=ujis;
set character_set_server=ujis;
set character_set_results=NULL;
status;
show variables like "char%";

--- 各テーブル毎に以下の変更を行う。
--- MySQL4.0 だと、 TYPE=MyISAM; の部分を変更する。

---
--- Table structure for table `foobar`
--- 
CREATE TABLE foobar (
  ....
) ENGINE=MyISAM DEFAULT CHARSET=ujis;

....

$ mysql -u ユーザ名 -pパスワード データベース名 < foobar.sql

PHPスクリプト

mysql_connect() を実行した後に、

mysql_query("set names ujis");

を行っておく必要があるようだ。
phpの設定ファイルなどで設定ができればよいのだが、どうも見当たらない。