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で正常表示、というのがよくわからないです。
完全にハマってしまって抜けられません。
アドバイス頂けますと助かります・・・。
検索すると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は一つも入っていませんでした。
自鯖ではないので、完全にこの部分を忘れていました・・・。
セットキャラクターで無事表示されました。
どうもありがとうございます!!