MT4で「~」「\」が文字化け&日本語タグクラウド重複【解決編】

2010年6月14日

ここのところずっと気になっていた記事ページで「~」と「\」が文字化けする問題。
なんとか解決しました。以下は最初からのまとめ。

【文字コードはUTF-8メインに決定】
詳細を調べつつ、サーバのサポートに問い合わせたところ、
「mt-config.cgi」に追加記述で、吐き出す文字コードの変更が可能と言われてしまい、
設定方法はサポート外ということで教えてもらえず。
公式サイトのマニュアルも読み込んで、なんとなくECU-JPで吐き出すようにすればいいのかなとも思ったけど、現状のUTF-8吐き出しでも特定の文字以外は文字化けしてないし、MT自体がUTF-8をメインに考えているようだし、プラグインや他のツールとの兼ね合いを考えても、UTF-8のchara-setを変えたくないという考えに落ち着きました。

【グーグル放浪の旅】
先日の煮詰まり編にて、相当な数の記事を読み漁りました。
1週間前は、コメント欄を見てもチンプンカンプンだったのが、だんだん意味がわかってきてちょっと嬉しい。
結局採用したのは以下。

【phpMyAdminでテーブルの照会順序を個別に「utf8_general_ci」に変える編】

日本語のタグを使用すると、タグが重複して表示される:MovableType お役たちメモ『「MySQL の接続照合順序」を「utf8_general_ci」になっているか。(phpMyAdmin から確認・設定可能。)』の記述があります。

MT4をインストールしてみた。|SOHO カアチャン通信
MySQL 接続照合順序:utf8_general_ciで解決したとの記述

MT3>MT4バージョンアップ時不具合
私がいずれやろうとしていた以下の二つもやっているが、いずれもダメだった模様。
・phpMyAdminでMySQL の接続照合順序utf8_general_ciへ変更→駄目
・DB初期化して上記実行、DBリストア→駄目
じゃぁ私がやってもダメに決まってる!(><)と思ったものの
しかし、下部のコメント欄で成功した人も発見。

phpMyAdminの接続照合順序はutf8_general_ciとなっていたのですが、テーブル”mt_tag”のフィールド”tag_name”の照会順序がsjis_japanese_ciになっておりました。これをutf8_general_ciに変更した所、正常に動作するようになりました

同様の変更で「utf8_unicode_ci」と記述しているところもあったが、
「utf8_general_ci」と記述しているところが若干多かったので、こちらを採用することに。

【mixiMTコミュ関連トピック抜き出し】
また、mixiの質問スレも結構参考になりました。
質問者がわからないことを素直に書いているところがわかりやすい。
でもちょうどピークを過ぎたとこだったのか、自分の質問はスルーされた(悲)

Movable Type | トピックを立てるまでもない質問 Part2
文字コードについて書かれている部分を抜き出しました。
・319~327 タグクラウドが反映されない【未解決】
 ダイナミックパブリッシングをやめることで正常に表示されるとの言及有り
・442~446 日本語のタグクラウドの重複表示の件【解決】
 解決方法:phpmyadminにてmt_tagテーブルのtag_nameをujis_japanese_ci→utf8_unicode_ciに変更

[mixi] Movable Type | MTで不具合が起きたらここで聞こう Vol2
文字コードについて書かれている部分を抜き出しました。
・175~182 MT3.33日本語のタグクラウドの重複表示の件(R社VPS使用者)【解決】
 解決方法:PublishCharsetをEUC-JPで指定(ASPの買い物カゴがUTF-8で使用不可のため)
・241~248 文字化けの件【解決】
 解決方法:メタタグでutf8の指定
・569~582 日本語のタグクラウドの重複表示の件【解決】
 解決方法:MTTagNameをUTF-8_Unicode ci (utf8)に変更
mixiだとUnicode ciの方が主流ぽい。どちらがよいのかはっきりしたことは掴めておりません。
この後は、文字コードの問題が出てもスルーされるという傾向に。
例えば591番の方とか・・・。私も見事にスルーされました(悲)

【照合順序の文字コード変更決行】
データベースをいじると初期化をしなきゃいけないっぽいので、かなり躊躇していたのだが、
上のいくつかのサイトから、やはり文字コードの変更以外に方法はない!
と確証が持てたので、実験用ブログのデータベースにて以下のことを決行しました。

1.phpmyadminにログイン
2.データベースを選択
3.左にテーブルの一覧が出てくるので、該当のものを選択。
4.メイン窓に出てきたフィールド一覧、照合順序があるもののみにチェックボックスを入れる。
5.下部エンピツマークのアイコンの「変更」をクリック
6.編集画面の照合順序で、「ujis_japanese_ci」を「utf8_general_ci」に変更

上記を行っただけで、新規に投稿した場合は、見事に愛しの「~」が普通に表示されました。
初期化やアップグレード作業ももちろん必要ありませんでした。
但し、今までの文字化けで?マークだったところと重複したタグは再構築してもそのままでした。
念のため実験用のブログで、変えれるところは全て変更したが、今のとこ不具合はなしです。
テーブルとして日本語が関わってくるのは、「mt_entry」「mt_tag」「mt_comment」「mt_trackback」だと思うので、ここを直せば、新しく投稿する分に関してはOKなのだと思う。