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

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で正常表示、というのがよくわからないです。

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


●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:CSV FIELDS FTP LF PHP
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tobeoscontinue
●100ポイント ベストアンサー

検索すると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ですべきなのでしょうが、やりかたがまずいのか反映されないので実行時に設定しています。

◎質問者からの返答

ありがとうございます!

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

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

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

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

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

関連質問


●質問をもっと探す●



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