今朝、「やっと MTOS の移行案件が終わったでぇ」とツイートしたばかりだったのに。
やっと、本来のプログラミングの作業に戻れるかと思ったのに。
昼飯食って作業場に帰ったら、「'~'とか'-'とか入れると、全部'?'になっちゃうんですけど・・・」とお客さんから電話が・・・
はぁ~Unicodeのマッピングの問題か・・・
記事入力したら'~'が'?'になっちゃうってことは、DB の問題やろぅ!?と phpMyAdmin で MTOS のテーブル見てみたら、案の定、全テーブルの照合順序が'ujis_japanese_ci'になってるやん。
入力が UTF-8 で、DB が EUC-JP なんだから、次にそれを再び UTF-8 で表示しようとすると化けるわなあ、そりゃ。
入力した内容を DB 登録した時点で(UTF-8 から EUC-JP に変換した時点で)、間違ったマッピングがおこなわれているんだからなあ。
UTF-8 → EUC-JP → UTF-8 なんて変換したら、'~'や'-'は確実に化けるわ。(これを Unicode の腐ったマッピング問題と言う(^^;)
確かに、phpMyAdmin で DB の設定を見てみると、文字関係のグローバル値が皆 ujis になってるやん・・・さくらインターネットの DB ってそうなんじゃあ・・・
しかし、日頃、直接サーバに ssh 接続して設定ファイル触ってる俺には、この phpMyAdmin しか使えない環境でどう DB の設定を変えればいいのかようわからんで。
いつも shell 画面上で mysql コマンド叩いてるから、phpMyAdmin なんて使わんしなあ。
結局、
ALTER DATABASE `hogehoge_dbl` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
と、SQL コマンドで DB の文字コードを UTF-8 に明示的に指定してやってから、再度 MTOS のインストールをしたら、ちゃんと照合順序が'utf8_general_ci'で作成されたので一安心。
'~'を入力すれば、ちゃんと'~'で表示されるようになった。
つーか MTOS って TABLE 作る時、CREATE TABLE のオプションに DEFAULT CHARSET=utf8 を付けんのんかいな(^^;
つーか、Unicode 死ね(^^;
まったく、今後はこういうレンタルサーバがらみの仕事は工数見積を気をつけんといかんな。
今回はもう完全に大赤字です。とほほ(^^;
コメントする