Mysql5.0/php5 の xrea サーバーで、

csvをインポートしましたが文字化けしてしまいます。

【1】csvはtextエディタで「ujis」「改行コードLF」で保存
【2】FTPでバイナリモードで転送
【3】load data local infile "xxx.csv" into table XXX fields terminated by ',';
でcsvを読み込み


という流れで行ないましたが、SSH上でselectで表示させても「???」になっています。

phpmyadminから見ると、何故か日本語で正しく表示されていました。

phpの自作プログラムからは、???になります。


以前は別サーバで全く同じプログラムと同じ手順で動いていたのですが、
新しいサーバーにしたら???になりました。

確認してみましたが、
【4】データベースは「ujis」で作成
【5】テーブルも「ujis」
となっていました。

ssh上で「???」で、phpmyadminで正常表示、というのがよくわからないです。

完全にハマってしまって抜けられません。
アドバイス頂けますと助かります・・・。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/05/18 15:19:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tobeoscontinue No.1

回答回数220ベストアンサー獲得回数59

ポイント100pt

検索するとMysql5.0での文字化けは結構出てきます。

私も悩んでいる一人ですが。

感じとしてmysql5.0では気をきかせてコード変換してくれるのですが、これが余計な御世話のように思います。


phpMyAdminでは正常に表示されるということでデータベースには正しく格納されていると思いますので取り出す時にコード変換がされているものと思います。

そこで設定がどうなっているか調べる必要があるのですがphpMyAdminでは既に設定を変えていると思うので使えません(MYSQLのシステム変数のcharacter set client, connection, resultsの値)


そこで下記のコードでcharacter set client, connection, resultsの値を確認します。

$db_sql = mysql_connect("server", "username", "passwd");
  $data = mysql_query("show variables");
  if ($data) {
    while ($row = mysql_fetch_assoc($data)) { print_r($row); echo "<br>"; }
  } else mysql_error();
mysql_close($db_sql);

これらが期待する値で無い場合、それが原因と考えられますので

  mysql_query("set character_set_client = ujis");
  mysql_query("set character_set_connection = ujis");
  mysql_query("set character_set_results = ujis");

を実行してから読み込むようにしてください


本来、このような設定はmy.confですべきなのでしょうが、やりかたがまずいのか反映されないので実行時に設定しています。

id:onigirin

ありがとうございます!

サーバーのキャラセットを見ると、

面白いようにバラバラでujisは一つも入っていませんでした。

自鯖ではないので、完全にこの部分を忘れていました・・・。

セットキャラクターで無事表示されました。

どうもありがとうございます!!

2007/05/18 15:18:02
  • id:tokyosmash
    >以前は別サーバで全く同じプログラムと同じ手順で動いていたのですが

    以前のMySQLのバージョンは何でしたか?
    4.0系ですか?
  • id:onigirin
    以前のも5.0系でした。
    なんとか解決できました。
    サーバー側の設定が前のサーバーと異なっていたようです。

    どうもありがとうございます!

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

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

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

回答リクエストを送信したユーザーはいません