MT4.22-ja やっとMySQL UTF8化

  • 投稿日:
  • by
  • カテゴリ:

やっとMySQLのデータをujisからutf8に変更しました。
前にやって妥協して、MySQL鯖上ではutf-8で動いてて、データ自体はujis で使い、
MT本体は、utf8で構築されているので、たまにMySQLに接続すると文字化けが出ていた。
今回は、phpMyAdmin を入れてデータ自体の文字化けを直すことから始めました。
その前に、phpMyAdminが動くまでいろいろとありましたが(´д`)

Vine Linux 4.2 で入っているMySQLのバージョンが
MySQL-server-5.0.51a-1vl4
MySQL-devel-5.0.51a-1vl4
MySQL-shared-5.0.51a-1vl4
perl-DBD-MySQL-4.001-0vl1
MySQL-client-5.0.51a-1vl4

Apache は2.2.10, php はソースからインストールしました。rpmでもよかったんだけど。
phpのバージョンは5.2.6。

php のインストール時に、エラーを吐いていて、調べてみると libxslt が入っていなかったので
libxslt-develをインストール。
libxslt-1.1.17-4vl4
libxslt-devel-1.1.17-4vl4

phpMyAdmin を動くようにしたら、「mcrypt 拡張をロードできません。PHP の設定を確認してください。」と
「mysql 拡張をロードできません。PHP の設定を確認してください。」の2個が
でたため、libltdl をインストールと、configure のオプションで、

--with-mcrypt
--with-mysql
--with-mysqli=/usr/bin/mysql_config
を追加。

http://sourceforge.net/projects/mcrypt/
libltdl のインストール
$ cd /usr/local/src/libmcrypt-2.5.7/libltdl/
$ ./configure --enable-ltdl-install
$ make
$ sudo make install

php のインストール
./configure \
--with-apxs2=/usr/local/apache2.2/bin/apxs \
--prefix=/usr/local/php \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-mbregex \
--enable-trans-sid \
--enable-zend-multibyte \
--with-zlib-dir=/usr/local/zlib \
--with-iconv \
--with-mysql \
--with-mysqli=/usr/bin/mysql_config \
--with-mcrypt \
--with-config-file-path=/etc \
--without-sqlite \
--disable-debug

make
make test
make install で終了。

phpMyAdmin を適当なフォルダに入れて、apache でalias でアクセスできるように追加。
フォルダにはパスワード、IPで隔離。

やっと、phpMyAdmin 起動時にエラーが出なくなった。

ujis のデータを utf8 にするのに結構めんどくさかった。
phpMyAdmin でそのまま「エクスポート」するが、6500が文字化け。
どうも使っていないテンプレートのごみが悪さをしていました。backupをとっていたのですが
そのファイルに文字化けが発生していた。いらないので削除。
よくあることだけど、前に文字化けが発生してるとその後も文字化けが続くという、
連鎖があるので、データを直さないといけない。
Blog本文、trackback、テンプレートのデータに文字化けがあった。
ホームページ上で見ると文字化けは発生していなかったので、そちらを参照しながら
ひとつずつ修正。
「エクスポート」をして、text エディタで文字化けが無いことを確認してから、

MySQL を utf8で使うための設定。
/etc/my.cnf の修正
[mysqld]
#default-character-set=ujis
default-character-set=utf8
character_set_server=utf8

[mysql]
#default-character-set=ujis
default-character-set=utf8

MySQLにログインして、
mysql> show variables like 'character%';
で確認。
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

utf8で動いてることを確認して、DB をutf8で作ります。
mysql> create database mt character set utf8;

そのあと、phpMyAdmin で「インポート」。オプションで、utf8 にしておく。
MySQL 接続の照合順序 を「utf8_unicode_ci」を選択する。
作成したデータベースにアクセスして、問題ないか確認する。

あとは、MTの管理画面からログインして、実際にファイルが文字化けが起こってないか
確認して終了。

今回問題だったのは、ujis → utf8 にするときにかなりのゴミがMySQL上にあったこと。
コンソールでやるより、phpMyAdminで作業したほうが直っているか確認できるため、
時間的には短縮できた。

いつかは、utf8にしないといけないと思っていたのだが、後になればなるほど修正が
増える可能性があるので、早めにやったほうが良いと思った。

MT3.xからの問題と、MySQL4.1前と4.1以降の問題などが重なり、妥協してるところが
かなりあったのだが、今回は全部修正で utf8 に統一することができた。

これで当分問題は起こらないはずだが....
昔作った医療関連ページの内容が多くて、更新できない。phpMyAdmin でデータを保存すると
問題ない。MTが書き込みでタイムアウト。あまりに長い文章はMTには向いていないみたい。