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ポイント以上差し上げます。
よろしくお願いいたします。

回答の条件
  • 1人10回まで
  • 登録:2007/05/30 22:54:51
  • 終了:2007/06/02 20:11:19

回答(7件)

id:openseed No.1

openseed回答回数51ベストアンサー獲得回数62007/05/30 23:22:05

ポイント20pt

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

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

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



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

参考まで。

id:elec_naoki

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

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

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

2007/05/30 23:36:37
id:hallo21 No.2

hallo21回答回数246ベストアンサー獲得回数22007/05/31 01:05:12

ポイント20pt

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

id:elec_naoki

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

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

2007/05/31 17:51:07
id:Yota No.3

Yota回答回数453ベストアンサー獲得回数282007/05/31 16:13:36

ポイント20pt

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);

?>

id:elec_naoki

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

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

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/ :

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

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

2007/05/31 17:52:21
id:Yota No.4

Yota回答回数453ベストアンサー獲得回数282007/05/31 18:51:08

ポイント20pt

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のバージョンと同じかどうかみてください。

id:elec_naoki

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

my.cnfに

[mysqld]

default-character-set=utf8

skip-character-set-client-handshake

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

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

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

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

2007/05/31 23:12:11
id:Yota No.5

Yota回答回数453ベストアンサー獲得回数282007/06/01 08:33:42

ポイント20pt

はなしの流れから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 < バックアップファイル名

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

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

id:elec_naoki

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

SHOW VARIABLES LIKE 'char%';

の結果は、

character_set_client : utf8

character_set_database : utf8

character_set_server : utf8

となっていました。

いつも

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

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

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

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

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

よろしくお願いします。

2007/06/01 20:31:55
id:hallo21 No.6

hallo21回答回数246ベストアンサー獲得回数22007/06/02 08:04:26

ポイント20pt

openPNEの再インストールはしたのですか?ここで適切なテーブルが作られるので、そのあと、データを戻せばいけるはずですが。

id:elec_naoki

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

再インストールしましたが文字化けは直りませんでした。

2007/06/02 20:06:58
id:Yota No.7

Yota回答回数453ベストアンサー獲得回数282007/06/02 10:13:45

ポイント20pt

character_set_client : utf8

character_set_database : utf8

character_set_server : utf8

これでやりやすくなりました。

バックアップファイルなるものがどういうものかわからないので、まず普通にテーブルを作って試してみてください。

CREATE TABLE enc_test (id INT AUTO_INCREMENT PRIMARY KEY, str VARCHAR(20));

INSERT INTO enc_test(str) VALUES('東京');

INSERT INTO enc_test(str) VALUES('なごや');

INSERT INTO enc_test(str) VALUES('オーサカ');

これを例えばenc_test.sqlというテキストファイルにUTF-8で保存して、インポートしてみてください。

id:elec_naoki

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

大変良い回答をいただけたのに申し訳ないのですが、今までのデータは捨てて新しく同じSNSを構築することにいたしました。

なので、この質問は終了させていただきます。

皆様、ありがとうございました。

2007/06/02 20:09:46
  • id:Yota
    書き忘れました。
    DROP TABLE enc_test;
    して、
    SQLの先頭に
    SET NAMES utf8 ;
    つけた場合とはずした場合をテストしてください。


この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません