2006年12月4日月曜日

MySQL周りの文字化けの理解の促進1

日本MySQLユーザ会について

MySQL4.0⇒4.1 に大きく言語の仕様が変わった模様。
アプリ ⇒ PHP ⇒ MySQLクライアント ⇒ サーバー 各個に言語設定の仕様があるので複雑で管理及び、問題特定が難しい。

備忘録;
MySQL周りの言語設定だけではだめ(上述)。
MySQL立ち上げる前に、呼び出し側(ex:MOSx、phpMyAdmin等)PHP内にてSET NAMESが必要。
SET NAMES character_set_name. UTF8

ただし、どこかのWEBサイトを参考に以下のようにしたが何れもNG。マネージャが文字化けしたり、作成した日本語によるドキュメントが文字化け。
\modx\manager\index.php(139):
mysql_query("SET NAMES utf8;");
\modx\manager\includes\header.inc.php(7):
$sql="SET NAMES utf8;";
\modx\manager\includes\extenders\dbapi.mysql.class.inc.php(89):
mysql_query("SET NAMES utf8;");
MODx上では正しく日本語を認識
上記の内容はphpMyAdminからは文字化けして見える。

MODxのバックアップデータ(SQL)をphpMyAdmin側でリストアすると、Utf_bin型のフィールドのみ正しく日本語で表示される。しかし、MODxで日本語表示されるかは未確認

MODxマネージャからのバックアップは成功したので、ZeRoさんの助言のように最低WebUser関連の型をすべてutf8_binにする。(一番大事になってるくるので)

ただ、このDB上にある latin1 UTF8_binに一括変換できないものか?

まだ、フォーラムで教えてもらったことを昇華できず。
こんなに助言を頂いて申し訳ないですne....


2 件のコメント:

ZeRo さんのコメント...

DBをエクスポートして、SQLのファイルをエディタで修正しちゃうのが楽ですよ
SQLのCREATE文にlatianってなっているところをUTF8に一括置換して、それをインポートするです。
phpmyadminでエクスポートですね。
DROP TABLESもチェックしてデータも完全なINSERTで、バイナリデータを16進では外せば、多分UTF-8で入れた記事がちゃんと日本語で見れるはずです。
それを上記の置換をして再度読み込ませると作り直してくれます。
latianでも今うまく表示されてれば検索が問題になるだけで表示はいけるはず・・じゃないかなぁ・・自信ないけど(^^;

ssmk さんのコメント...

ZeRoさん、お久しぶりでございます。毎度ありがとうございます。

SQLの修正の件はアイデアとしてはあったのですが、やっぱりAccessで触れたレベルで今、勉強しながらやってます。中身の誤ったらデータが消えそうなので慎重になってます。(いちおうバックアップはphpMyAdmin、modxマネージャ両者からしていますけど)

> DROP TABLESもチェックして
> バイナリデータを16進では外せば
⇒ 勉強します。

この頃は手持ちの業務が忙しくなりかなりスローペースです。ほほえましく見守ってやってください。