人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLの文字化けに関する質問です。

OpenPNEでつくったSNSを持っているのですが、事情があり、
1.Webminでバックアップ
2.データベースのテーブル削除
3.Webminでリストア
を行ったところ、全ての日本語が「?」で表示される文字化けが発生してしまいました。

やってみたことは、

1.テーブルを削除して、文字コードを変えてリストア
結果:変わらない

2. .htaccessに下のものを記述する
php_value mbstring.language neutral
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_output UTF-8
php_value default_charset UTF-8
結果:変わらない

どうすれば文字化けが直るでしょうか?
なるべく早く、お答えください。
お答えいただいた内容どおりにやって、うまくいった場合は60ポイント以上差し上げます。
よろしくお願いいたします。

●質問者: elec_naoki
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:.htaccess MySQL OpenPNE SNS UTF-8
○ 状態 :終了
└ 回答数 : 7/7件

▽最新の回答へ

1 ● openseed
●20ポイント

webmin でバックアップしたことありませんが、ダンプしたファイルをインポートするときに、デフォルトキャラクタを指定しないと、文字化けした経験があります。

そのときは、以下のように、デフォルトキャラクタを指定したときに解決しました。

$ mysql -u[ユーザID] -p[パスワード] --default-character-set=utf8 テーブル名 < dump.sql



PS:文字化けしていたケースでは、 phpMyAdmin のような別のツールで参照したときも文字化けしていました。

参考まで。

◎質問者からの返答

ご回答ありがとうございます。

インポート時にデフォルトキャラクタ(utf8)でやってみましたが、変化ありませんでした。

どうすればいいでしょうか??


2 ● hallo21
●20ポイント

同じことばっかり質問にでるので、過去質問を検索してください。

◎質問者からの返答

御回答ありがとうございます。

過去の質問も見てみましたが、ほとんどを試してみても無理でした。


3 ● Yota
●20ポイント

1.Webminでバックアップ

そのバックアップファイルはUTF-8であるとします。

それにもかかわらずMySQLのテーブルではUTF-8でなくなっているとすると、MySQL4.1以降の自動文字変換が働いたと推測できます。

サーバの文字エンコーディング設定がどうなっているか確認するために、PHPを通してアクセスしているなら、下のプログラムをウェブサーバで実行してみてください。

<?php

$h = mysql_connect('localhost', 'root', ''); //ホスト名、ユーザー名、パスワードは変更してください

$q = "SHOW VARIABLES LIKE 'char%'";

$res = mysql_query($q, $h);

$i = 1;

while ( $line = mysql_fetch_array($res, MYSQL_ASSOC) )

{

foreach ($line as $k=>$v)

{

print "$v : ";

if ( ($i % 2) == 0 ) { print "
\n"; }

$i++;

}

}

mysql_free_result($res);

mysql_close($h);

?>

◎質問者からの返答

御回答ありがとうございます。

結果、このように出力されました。

character_set_client : latin1 : character_set_connection : latin1 : character_set_database : ujis : character_set_filesystem : binary : character_set_results : latin1 : character_set_server : ujis : character_set_system : utf8 : character_sets_dir : /usr/share/mysql/charsets/ :

重要な手がかりだと思うのですが、どのようにすれば直るのでしょうか。

よろしくお願いいたします。


4 ● Yota
●20ポイント

character_set_client : latin1

character_set_database : ujis

character_set_server : ujis

この設定ですと、MySQLサーバは基本的にujisで運用されていますが、クライアントは何もしなければlatin1であるとみなされます。つまり自動文字変換が行われる。

my.cnfかmy.iniに

default-character-set=使いたいキャラクタセット名

skip-character-set-client-handshake

http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_40

とすれば解決する場合もありますが、たぶんだめだと思います。

なぜかというとPHPがlatin1で作られたlibmysqlclientかlibmysql.dllでコンパイルされていると予想されるからです。

<?php

phpinfo();

?>

で表示される画面からmysqlの項目のところで

Client API versionが今使っているMySQLのバージョンと同じかどうかみてください。

◎質問者からの返答

度々御回答ありがとうございます。

my.cnfに

[mysqld]

default-character-set=utf8

skip-character-set-client-handshake

と記述し、再起動した後に再度リストアを行いましたが無理でした。

Client API versionはいま使っているバージョンと同じでした。(5.0.27)

この文字化けを直すことはできるのでしょうか。

よろしくお願いいたします。


5 ● Yota
●20ポイント

はなしの流れからUNIX系のOSであると推測されます。一番すっきり解決する方法はMySQLとPHPをコンパイルし直すことです。でも普通そうはいかないとして。

my.cnfを書き直して再起動した後もう一度

SHOW VARIABLES LIKE 'char%';

の結果を確認してください。

character_set_client : utf8

character_set_database : utf8

character_set_server : utf8

のようになっているとします。

どういうふうにリストアしているかわかりませんが、コマンドラインでやるとすると、

$mysql --default-character-set=utf8 < バックアップファイル名

とやっていみてください。

回答数が尽きるかもしれないので、コメントあけておいてください。

◎質問者からの返答

ご回答ありがとうございます。

SHOW VARIABLES LIKE 'char%';

の結果は、

character_set_client : utf8

character_set_database : utf8

character_set_server : utf8

となっていました。

いつも

$mysql --default-character-set=utf8 < バックアップファイル名

とやっていますが、変化なしです。

回答者の制限を緩めました。

毎回、本当にありがとうございます。

これは諦めるしかないのでしょうか?

よろしくお願いします。


1-5件表示/7件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ