ID-Blogger

MovableTypeでMySQL5を使用すると文字化けする対策

MovableTypeでMySQL5使用すると文字化け

世の中はお盆休みなんですね...皆様いかがお過ごしでしょうか?

さすがにこの期間中はクライアントからの連絡もナシなもので、ジックリ仕事に打ち込んじゃいます。デザイナーはワーカホリックな人種だから休むと逆に不安になっちゃうんですよねw


サイトが設置してあるレンタルサーバの仕様が変更になった旨のお知らせメールをクライアントが見逃しちゃってたもので、インストールしてあった「MovableType 3.35」にログインできない事態に!
この解決をお盆休み前に宿題にされてたので頑張ってサルベージしておりました。

どうもPHP4とMySQL4が開発元のサポート終了にともなって、レンタルサーバ会社でPHP5とMySQL5に切り替えたのが原因らしい。
MovableTypeはCGIベースで動いてるのでPHPは関係ナイはずと踏んで、phpmyadminでデータベースの中身をみてみるものの一応データもテーブルも正常に移行されてるっぽい...
経験上この手のエラーは文字エンコードが問題になっている場合が多いので、とりあえずphpmyadmin上からユーザー名の日本語を英語に変更してみる。

おぉ!ログインできた♪やはり文字エンコードが問題だw
がしかし!ブログとか記事部分の日本語表記は全部文字化け!ブラウザ側で変更してテストしてみると、どうやらEUC-JPに変わってしまっている模様。
レンタルサーバ会社でデータ移行時にUTF-8で格納していたデータをEUC-JPにして移したと判断し、phpmyadminで参照順序をUTF-8に修正したり、全データをエクスポートしてUTF-8に直してからインポートしたりしたけど全然解決できず...なぜだ?!

あーでもないこーでもないと数時間トライ&エラーの連続。
んー結局ダメか...と思った矢先、クライアント経由でレンタルサーバ会社から来たメールがあったのを思い出す。

MovableTypeのページの文字化けについてご連絡させていただきます。

いただきましたお問合せにつきまして、弊社は、MovableType の開発元ではございませんため、MovableTypeの挙動に関する正式なサポートは出来かねますが、MovableTypeをUTF-8で運用している際の文字化けに関する情報が、検索エンジンなどで多くみつかりましたのでご案内いたします。

Googleで「MovableType MySQL5 文字化け」を検索

こちらを確認する限り、MovableTypeをMySQL5で運用する際の既知の問題となり、MovebleType側の設定値で動作を修正する案件のようでございます。

ナニーーー!!
結局はMySQL5で運用する際のMovableType側の問題なのか?!


で、ググったらあるわあるわ...

頭ん中:Movable TypeをMySQL5で使おうとしたら文字化けして泣きそうになったときのためのメモ

mt-config.cgi に「SQLSetNames 1」の1行を追加する。(*)

以上。

* もちろんもとから # SQLSetNames 1 となっている人は、 # を取るだけ。普通はそうなってるものなのかもしれないが、うちのはなってなかった。

ついでにこの SQLSetNames というのは何かというと、

Movable Type 3.2 マニュアル - 環境設定ファイル (mt-config.cgi)
【SQLSetNames】
データベースへのアクセスする際のエンコードを明示的に設定するものです。値が"1"の場合、PublishCharsetの設定値をもとに、データベースとの接続時のエンコードを指定します。MySQLやPostgreSQLを利用していて、クライアント側のエンコードを指定する必要がある場合、この値を設定してください。

とのこと。

さあ、同じ症状で困ってここにたどりついたあなた。
泣くのはおよし。
僕たちには SQLSetNames があるじゃないか。

え?それだけでイイんですか?
だまされたと思ってやってみると...直った(;´Д⊂)

あんなに悩んだ数時間を返してくれSix Apart!!
ちなみにMovable Type4.xとかでも同じ症状が出ているようなので、上記の解決法は通用しそうですw