PHPでMysqlにCSVをインポートす文字化け
お世話になります。
文字化けが解消できずに困っています。
PHPからローカルXAMPPのMYSQLにCSVでデータを上げたいのですが、日本語が文字化けして表示されます。秀丸テキストエディタで可能な限りのエンコードを試しましたが解決できず、サーバ側のエンコード設定も確認しましたがutf8_unicode_ciです。
Mysqlの管理画面のsqlから実行しても同様の結果です。
もう、色々やり過ぎてPHPが悪いのかMysqlサーバの設定なのかCSVの問題なのかわからず途方に暮れています。
諸先輩方でお分かりになられる方がいらっしゃいましたら是非、お知恵を貸してもらえませんか。
PHPのソースです。
------------------------------
$host = "localhost";
$mysql_user = "root";
$mysql_password = "password";
$db = "utsun_db";
$cn = mysql_connect($host,$mysql_user,$mysql_password);
if(!$cn){
die("db connect Error");
}
if(!(mysql_select_db("$db"))){
die("db select error");
}
$file = '"c:/tablea.csv"';
$sql = "LOAD DATA LOCAL INFILE $file INTO TABLE tablea FIELDS TERMINATED BY ',';";
$query = mysql_query($sql);
mysql_close($cn);
-----------------------------
CSVの中身
N551佐々木37
N552伊藤41
N553斉藤31
N554井上43
N555阿倍31
-----------------------------
Mysqlの方ではこのように表示されています
N552
伊藤
41
N553
斉藤
31
N554
井上
43
N555
阿å€
31
ほんとうに困っております宜しくお願いします。
環境
Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
phpMyAdmin
バージョン情報: 3.5.2.2, 最終安定バージョン: 4.0.4.1
投稿日時 - 2013-07-11 20:06:55
MySQLのLOAD DATA INFILEにおいては、
character_set_databaseシステム変数の文字コードが使用されます。
おそらくですがxamppでインストールしたMySQLでは、
character_set_database = latin1
が設定されているので、これを変えてあげればいけると思います。
方法としては2つ。
【前提】
・csvファイルの文字コードは「UTF-8」とする。
【方法1】PHPのスクリプト内で設定する。
ご提示いただいたソースで、
-------------------------------------------------------------
$query = mysql_query('set character_set_database=utf8;'); // ←追加
$file = '"c:/tablea.csv"';
$sql = "LOAD DATA LOCAL INFILE $file INTO TABLE tablea FIELDS TERMINATED BY ',';";
$query = mysql_query($sql);
mysql_close($cn);
-------------------------------------------------------------
の「set character_set_database=utf8;」を実行する1行を、
「LOAD DATA LOCAL INFILE」でデータを取り込む前に実行してあげる。
【方法2】MySQLの設定を変更する。
MySQLの設定ファイル
c:\xampp\mysql\bin\my.ini
(適宜ご自分の環境に置き換えてください。)
に、
-------------------------------------------------------------
# [client]ブロックに下記の行を追加する
default-character-set=utf8
# [mysqld]ブロックに下記の行を追加する
character-set-server=utf8
skip-character-set-client-handshake
-------------------------------------------------------------
を追記して、MySQLを再起動して、PHPを実行する。
(こちらの場合はソースの変更はいらないかと思います。)
【参考サイト】
http://1000g.5qk.jp/2010/11/04/xampp%E3%81%AEmysql%E3%81%A7%E6%AD%A3%E3%81%97%E3%81%8Futf-8%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/
のどちらかの方法で、いけるかと思いますので、
ご確認いただけますでしょうか?
よろしくお願いします!
参考URL:http://www.softel.co.jp/blogs/tech/archives/2293
投稿日時 - 2013-07-12 10:07:57
最初のやり方で解決しました!ありがとうございます。
なんとお礼を言っていいやら、涙がちょちょぎれています。
やっと足踏みから解放されました本当に助かりました。
重ねてありがとうございました。
投稿日時 - 2013-07-12 10:49:54
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(1)