?(クエスチョンマーク)に文字化けしたら

MODXなどのCMSで、MySQLデータベースの照合順序が ujis_japanese_ci になっていると、改行、記号、特殊文字などが「?(クエスチョンマーク)」に文字化けする場合があります。このサイトではMySQL4のサーバからMySQL5のサーバに引っ越した後に、この問題が発生しました。

ここでは、データベースの照合順序を ujis_japanese_ci から utf8_general_ci に変更する方法をまとめます。

  • この方法は、このサーバのphp MyAdminの画面に即しています。お使いのものとは異なる場合がありますので、十分にご注意ください。
  • 誤操作により、データベースが壊れ、ウェブサイトが表示できなくなるリスクがあります。この操作は自己責任でお願いします。

1. データベースのバックアップ

MODx管理画面の「ツール」メニューから「バックアップマネージャー」でデータベースをバックアップして、ログアウトします。

2. phpMyAdminによる照合順序の変更

phpMyAdminにログインして、localhostのMySQLの接続照合順序を、「utf8_general_ci」に変更します。

照合順序を変更したいデータベースを選択します。

操作」タブを開き、画面最下部にある「照合順序」を「ujis_japanese_ci」から「utf8_general_ci」に変更します。

構造」タブを開き、各テーブルの照合順序が「ujis_japanese_ci」になっていることを確認します。

information_schema」データベースを選択します。「SQL」タブを開き、次のSQL文の< >部分をカスタマイズして、実行します。

SELECT "ALTER TABLE ", `TABLE_NAME` ,

" CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"

FROM `TABLES` WHERE `TABLE_SCHEMA` = '<MODxのデータベース名>' AND `TABLE_NAME` LIKE '<テーブル接頭語>_%'

正しく実行できたことを確認して、「クエリ結果操作」の「エクスポート」をクリックします。

CSVデータ」を選択して、「フィールド区切り記号」、「フィールド囲み記号」、「フィールドのエスケープ記号」の欄をすべて削除して実行します。

実行結果をコピーします。データベースを「information_schema」から「MODxのデータベース」に切り替えます。

SQL」タブを開き、先にコピーしたSQL文を貼り付けて、実行します。各テーブルの照合順序が、「utf8_general_ci」に変更されたことを確認します。

関連記事

MODXとは