サーバ移転の話が続きますが、MTを移転すると、管理画面に入ったとき、文字化けしているときがあります。
大体そういう場合は、データベースの文字コードがおかしかったりします。
特に「latin1_swedish_ci」の場合。
最近のレンタルサーバであれば「utf8_general_ci」に自動的になってくれたりするところもあるのですが、専用サーバなどの場合、phpMyAdminなどで何も考えずにデータベースを作ると大体この「latin1_swedish_ci」になります。
それでも、これからMTをインストールする分には、特に文字化け問題は発生しないのですが、問題はサーバを移転したとき。
以前のサーバでは「latin1_swedish_ci」でも正常に表示できていたはずなのに、移転した途端文字化けが発生したりします。
というわけで、このような場合は、「utf8_general_ci」に文字コードを変換してあげましょう。(MTの文字コード設定がUTF-8の場合)
とはいえ、ただ単にデータベースやテーブル、フィールドの文字コード設定を変えても解決しません。「latin1_swedish_ci」の文字コードで変換されたデータが入っているわけですから、これをutf8にコンバートする必要があります。(正確には一度バイナリ化し、バイナリからUTF-8に変換します。参考サイト)
しかし、1つ1つ文字コードを変換なんて途方にくれます。こういう場合はプログラムの出番ですね。
※以下の処理は自己責任でお願いします。実行する際は必ずあらかじめバックアップをとってください。
[PHP]
$table_data){
$sql = "SHOW FIELDS FROM ".$table_data["name"].";";
$res = mysql_query($sql) or die(mysql_error());
$num = 0;
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
$table_array[$table_num]["field_name"][$num] = $row[0];
$table_array[$table_num]["field_type"][$num] = $row[1];
$num++;
}
mysql_free_result($res);
}
//照合順序を変換します
foreach($table_array as $table_num => $table_data){
foreach($table_data["field_type"] as $field_num => $field_type){
$field_name = $table_data["field_name"][$field_num];
if(preg_match("/^[varchar]/", $field_type)){
$sql = "ALTER TABLE ".$table_data["name"]." MODIFY ".$field_name." VARBINARY(255);";
mysql_query($sql);
$sql = "ALTER TABLE ".$table_data["name"]." MODIFY ".$field_name." ".$field_type." CHARACTER SET utf8 COLLATE utf8_general_ci;";
mysql_query($sql);
}elseif($field_type == "mediumtext"){
$sql = "ALTER TABLE ".$table_data["name"]." MODIFY ".$field_name." BLOB;";
mysql_query($sql);
$sql = "ALTER TABLE ".$table_data["name"]." MODIFY ".$field_name." ".$field_type." CHARACTER SET utf8 COLLATE utf8_general_ci;";
mysql_query($sql);
}
}
$sql = "ALTER TABLE `".$table_data["name"]."` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";
mysql_query($sql);
}
mysql_close($conn);
}
?>
[/PHP]
DB設定(14~18行目)のところには、データベース情報を入力してください。
これをUTF-8形式で保存してください。ファイル名は拡張子がphpであればなんでも結構です。(もちろん半角英数字で)
サーバにアップロードし、ブラウザでアクセスして、「実行する」ボタンを押してください。
これで、テーブルおよびフィールドの文字コードが「utf8_general_ci」に変換されます。(ただし、データが多すぎると途中でInternal Server Error画面になります)
私が試した限りでは正常に動作しましたが、不具合が起きる可能性も十分すぎるほどありますので、実行前は必ずバックアップは取っておいてください。