« Vine4.0奮闘・mysqld | メイン | Vine4.0移行苦戦中 »
2006年12月11日
MovableType と MySQL 4.1 (or later)
[ カテゴリ : memo - 自宅サーバ設定(Linux、たまにWindows) ]
文字コードうんたらかんたらで死にましたとさ。
で、Vine4.0のrpm で入った MySQL と MT3.2 の折り合いのつけさせかた。
(なんで設定ファイルの場所とか違ったらごめんなw)
1:過去の間違い
過去の mysqldump の結果が --default-character-set 指定してないのでおかしい。
どうやら utf8 を ujis(EUC) とみなして utf8 に変換かけるとか変なことされたらしい。
よって使えなかったんだが、投入してしまった(汗
ちなみに、もともと MySQL の中身がどうなってるかわからん人があわてて後述のオプション指定すると変な変換かけてデータ壊す恐れがあると思うんだ。
そういうことする前に、 mysqldump で --default-character-set=binary でダンプとっておくといいと思うんだ。
latin1 や utf8 な入れ物に EUC を無理矢理つっこんだデータを安全に取りだしておくとかするには binary から試してみるといいらしいんだ。
いや、やってないんだけど。その前に壊したし(爆)
おかげで MovableType の html(utf8) から下記情報をsql形式でひっこぬくスクリプト完成(爆)
entry_id,entry_title,entry_text,entry_text_more,comment_id,comment_author.
mt_blog,mt_category,mt_template あたりは sqldump の結果と html を見て手作業修正(爆)
まぁ trackback 関係以外は直ったからいいや(よくない)
2.ただしい設定(MT3.2)
2-1.MovableTypeの文字コード:utf8 ってことにする
→mt-config.cgi で、PublishCharset を "utf8" とかやる。
いや、今生きてる設定そのままにしておけよ?w
2-2. MovableType が MySQL に utf8 でデータを渡す際「あいすぴーくゆーてーえふはち!」と宣言するようにする
→mt-config.cgi で SQLSetNames 1 を指定する(1を指定すると2-1で指定したutf8だと主張するらし)
ちなみに SQLSetName 1 と書いて爆死したアホがいますよ。
どうなるかわからない例
PublishCharset Shift_jis
SQLSetNames ujis
みたいに別のを指定するとどうなるんでしょう?たぶん死ねます(SetNames は名前指定するだけぽい)
MySQL の文字コード名がわからん人は下記2-5あたりを見るといいと思うんだ。
2-3. MySQL が内部データを utf8 で持つようにする。
my.cnf で、[mysqld] default-character-set=utf8
2-4.MySQLの mysqldump でバックアップ取るときもutf8 で吐き出すようにする。
/etc/my.cnf (Vine4.0のrpmの場合)の [mysqldump]で以下同文。やってないけど、たぶんそんな。
2-5.MySQLの mysql が吐き出す文字コードは、、、
my.cnf [mysql]に書けるらしいが、正直毎回明示してやるのがいいと思うんだ。
mysql --default-character-set=ujis
ujis ってのは EUC のことなんだ。
mysql --default-character-set=EUC
とかやると、"EUCなんて言葉は某ファイルで定義されてません" とかでるので、当該某ファイルを見るとたしかに EUC じゃなく ujis って書いてあるんだ。utf-8もおこられるんだ。
2-6.じゃー [client]って何よ?
なんだろ(爆)
2-7.つーか、MySQL の文字コード設定おおすぎね?
$ echo "show variables like 'character%';" | mysql -u root -p
とかやってパスワード入れるとずらずらでるねw
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/
どれが何だかしらべておかないといけない気がするんだ。
面倒だからなるたけutf8に統一して、MT については正しく動作するようにしたけど、、、、、xoops が EUC 使ってるからまた頑張る必要があるんだ。
投稿者 JK : 2006年12月11日 10:36
トラックバック
このエントリーのトラックバックURL:
http://om.pizzica.to/mt-tb.cgi/64
コメント
DB は 4.0.x で mysqldump しておいて 5.0.27 に食わせれば、時折フィールドが長すぎになる以外はだいたいなんとかなるかな。SET NAMES すれば必要な部分は全て切り替わるパッチを当てておいたので、DB さえ無事移行できれば、あとは各アプリで接続直後に SET NAMES するようにガリガリ改造すればほぼ無問題。
ただ、どうやっても最終的には UTF-8 に変換して保存する仕様なので、sjis で運用していたものは cp932、ujis で運用していたものは eucjpms にしておいた方が無難。
投稿者 tomop : 2006年12月11日 14:32
mysqldump の吐き出し結果がおかしかったのに、apt-get dist-upgrade してから気づいたのよんw
xoops 分の吐き出しは正常だったので、SET NAMES 改造したらあっさり、、、でもないけどすぐ終わった。
php.ini さんざん書き換えておいて、、、、、 service httpd restart してなくて苦戦とかw
クライアントがみんな SET NAMES に対応するまではハラハラドキドキですなぁ。
まぁ、いつかは通る道で、通ってしまえば後は快適に過ごせそうな気がするんだが、移行で苦労しすぎたww
ちなみに、同じような苦労をした人は日本全国たくさんいるらしく、ぐぐったら例に事欠かなかったw
投稿者 JK : 2006年12月12日 15:08