phpMyAdmin文字化け修正

  • 投稿日:
  • カテゴリ:

MT6用のMySQLデータベース(mt6db)の内容が文字化けしていた。サーバでデータベースを作成したときの初期値(my.cnf設定)で、文字コードが "latin1_swedish_ci"になっていたためである。過去に何度か文字化けが発生し、それを修復して学習したはずだが、数年も経つとすっかり忘れてしまっていた。

サーバと照合順序とMT6のデフォールト文字コード

MT5以後、文字コードはUTF-8がデフォールトになった。昔は、mt-config.cgiにcharacterset, mbstring, namesなどを設定することがあったが、今は無関係である。すべてUTF-8で処理される。一方、サーバのMySQLで扱う文字コードはmy.iniやmy.cnfで設定する。

共有レンタルサーバでは、ユーザはMySQL初期設定(システム全体)を変更することができない。個々のデータベースの文字コードは、phpMyAdminの「照合順序」で設定する。Hostmonster, Bluehostなど多くのWebサーバでは、新規にデータベースを作成したときの文字コードは、なぜかlatin1_swedish_ciになっている。

MySQL5.5.xでは、「サーバ接続の照合順序」は "utf8mb4_general_ci" になっており、サーバの文字セットもUTF-8 Unicode (utf8)になっている。しかし、新しく作ったテーブルの文字コードはすべてlatin1_swedish_ciになる。一方、MTはutf8で書き込むので、初期設定時の照合順序(latin1_swedish_ci)のままだと文字化けになってしまうというわけだ。

MT管理画面では、utf8で書き込みutf8で読んでいるので文字化けしない。phpMyAdminで読めるようにするためには、すべてのテーブルの照合順序をutf8(utf8_general_ci)にしなければいけない。厄介なことに、一度latin1_swedish_ciで作成されたテーブルは、phpMyAdmin操作で照合順序をutf8に変更しても文字化けは解消されない。それどころか、utf8に変更すると、今度はMT管理画面が文字化けする。

latin1からutf8に変換する手順

ネットで同じような問題に直面した人が書いた情報(下記参考リンク)を調べ、あれこれ試してやっと解決できた。修正手順を下記にメモしておく。※アップロード時のエラーも発生(下記参照)

  1. phpMyAdminを使ってデータベースをエクスポートする。
    圧縮ファイル(zipまたはgzip)でダウンロードしたときは、これを展開する。
  2. 展開したファイルをNotepad++、秀丸などのテキストエディターで開く。
    MKEditorはファイルサイズが大きい(10MB以上)とメモリー不足のエラーになる。
  3. 秀丸(期間限定で無料試用)の場合、エンコードの種類を「欧文(西ヨーロッパ言語)」にして別の名前で保存する。「文字コード変換できない文字が含まれます」という警告が表示されるが、かまわずに保存する。保存したファイルを再度開くと文字化けが解消されている。
  4. このファイル(sqlテキスト)の中の、「CHARSET=latin1;」をすべて「CHARSET=utf8;」に変更して、上書き保存する。
  5. 変更後のファイルを50MB以内に圧縮して、phpMyAdminでインポートする。
    ※インポートする前に、データベースの照合順序が utf8_general_ciになっていることを確認する。
  6. MT6のmt-config.cgiの中の接続するデータベース名を、インポートしたデータベースの名前に変更する。

以上の作業を完了後は、MT管理画面もphpMyAdminも文字化けがなくなる。先に書いたように、照合順序がlatin1_sweden_ciのままでも機能するが、サーバやドメインを移行するときに文字化けが発生してしまうので、前もってすべてutf8に修正しておいたほうが良い。

phpMyAdminインポート中にSQL Syntax Error発生

大きなファイルを圧縮(例:68MB→7.5MB)してアップロードすると、#1064のエラーになって処理が中断された。ファイルが大きいと、SQL処理途中で転送が中断して、Syntax Errorになることがある。sql dumpを小さく分割してアップロードすると解決する。

utf8とutf8mb4

MySQL5.5以降からutf8mb4がサポートされた。utf8は文字当り3バイトだが、utf8mb4では4バイト使用する。つまり4バイト文字に対応できるようになった。通常、日本語漢字ではutf8で十分で、4バイトの特殊文字も扱える(未確認)そうだ。

Hostmonsterのサーバ接続の照合順序のデフォールトが utf8mb4_general_ci になっており、共用サーバの場合、phpMyAdminから変更できない。データベースおよびテーブルを作成するときに文字コードを設定(変更)する必要がある。データベース作成時の文字コードのデフォールトはlatin1なので注意が必要だ。

Hostmonsterデータベースサーバ

  • サーバ: Localhost via UNIX socket
  • サーバの種類: Percona Server
  • サーバのバージョン: 5.5.42-37.1-log - Percona Server (GPL), Release 37.1, Revision 2
  • プロトコル バージョン: 10
  • ユーザ: cpses_syQnqjamR6@localhost
  • サーバの文字セット: UTF-8 Unicode (utf8)
  • phpMyAdmin バージョン情報: 4.3.8, 最終安定バージョン: 4.6.3

参考リンク

  1. phpMyAdminで文字化けしたデータの修正方法
  2. phpMyAdminの日本語文字化け
  3. phpMyAdminが文字化けする
  4. phpMyAdmin で文字コードの確認(文字化け対策)
  5. Movable TypeのMySQL設定
  6. Movable Typeでデータベースの文字化け
  7. Movable Type の管理画面が文字化け
  8. Migrating MySQL latin1 to utf8
  9. SOLVED!SQL error when import database (Posted 20 June 2016 - 08:37 AM)
  10. syntax error on import mysql
  11. When are we supposed to set default-character-set for the client?
  12. SQL Syntax; What is this? (/*!40101 SET NAMES utf8 */;などの意味)
  13. Character Sets and Collations Supported by MySQL 5.5
  14. 文字セットと照合順序