印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
LinuxMovableType Movable Type の管理画面が文字化け

OS のデフォルトの文字コードが変更になったことで Movable Type の管理画面が文字化けするようになってしまった。システムの文字コードと MySQL のデータベースの文字コードを変更することで対応する。

■ ■ ■

OS を更新したところ (nlog(n): サーバの OS を Vine Linux 4.2 から 6.2 へ更新),OS のデフォルトの文字コードが EUC-JP から UTF-8 に変更になった。Movable Type のコンテンツを EUC-JP で作っていて,MySQL データベースの /var にあったデータをそのまま新 OS にコピーしたところ,Movable Type の管理画面が文字化けするようになってしまった。

動作環境と現象についてまとめると,次のようになる。

  • システムのデフォルトの文字コードが EUC-JP から UTF-8 になった
  • Movable Type の MySQL のデータは EUC-JP で,管理画面が文字化け
  • Movable Type のレンダリングした HTML は EUC-JP で,ブラウザで表示すると文字化けしたりしなかったり

対応する方針としては次とした。

  • システムの文字コードを EUC-JP にする
  • MySQL の設定でデフォルトを EUC-JP とする
  • Movable Type の MySQL のデータを明示的に EUC-JP だと指定する
  • Apache は .htaccess でレスポンスヘッダの文字コードを EUC-JP で出力するように指定する

この条件をドンピシャでまとめてくれているサイト (mysqlの文字コードをEUC-JPにする - 揮発性のメモ) を全面的に参考にした。ありがたや〜。

システム全体を EUC-JP に統一する

まずシステム全体を EUC-JP に統一することにした。

# cat /etc/sysconfig/i18n
LANG="ja_JP.eucJP"
SUPPORTED="ja_JP.eucJP:ja_JP:ja"

しかし,これには若干問題がある。man は EUC-JP で表示されるようになるが,アプリケーションによっては UTF-8 でハードコーディングされているため,ターミナル (よく使うのは TeraTerm) の出力文字コードをその度に切り替えなければならないことがあるのだ。

MySQL のデフォルトの文字コードを EUC-JP だと宣言する

MySQL のデフォルトの文字コードを /etc/my.cnf で設定する。

# cat /etc/my.cnf
[mysqld]
skip-character-set-client-handshake
character-set-server = ujis
collation-server = ujis_japanese_ci

log_error="/var/log/mysql/error.log"
log_warnings=1

MySQL を再起動。

# /etc/init.d/mysql restart

MySQL のデータベースの文字コードを EUC-JP に変更する

Movable Type の管理画面が文字化けした状態で,MySQL の状態を調査する。

mysql> show variables like "char%";
+--------------------------+----------------------------+
| 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 になっている。EUC-JP に変更するには ujis を指定する。

mysql> ALTER DATABASE nlogn_db CHARACTER SET ujis;

変更できているか確認する。

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | ujis                       |
| character_set_connection | ujis                       |
| character_set_database   | ujis                       |
| character_set_filesystem | binary                     |
| character_set_results    | ujis                       |
| character_set_server     | ujis                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

文字コードを変更する際に,データベース名 nlogn_db を指定しているのに,確認するときにはデータベース名を指定していないのが何故なのか分からないが,システムには EUC-JP のデータベースしかないので追求しないことにする (笑)。character_set_system が utf8 なのは無視してよいそうだ。

.htaccess による文字コード設定

サーバのデフォルトの文字コードが UTF-8 になったタイミングで,EUC-JP で送出している HTML ドキュメントが文字化けするようになってしまった。同じブログ内なのに文字化けするページとしないページがあるというのが意味ワカメだが,HTTP のレスポンスヘッダを見ると UTF-8 になっていたので .htaccess で文字コードを指定することにした。

AddType "text/html; charset=EUC-JP" html

これでひとまずは OK なはず。

Posted by n at 2014-11-05 04:23 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?