- 締切済み
日本語TSVファイルのLOAD DATA INFILE が失敗
日本語(EUCJP)を含むタブ区切りテキストのインポートに失敗しており、 行き詰ってしまいました。考えられる原因等お気付きありましたら、 ご指摘頂ければ助かります。 尚、my.cnfで[mysql], [mysqld], [mysqlimport], [mysqldump]は、 default-character-set=ujis で設定しています。 mysql> select version(); +---------------------+ | version() | +---------------------+ | 5.0.27-standard-log | +---------------------+ 1 row in set (0.00 sec) mysql> LOAD DATA INFILE "/hoge/hoge.csv" INTO TABLE test; Query OK, 5 rows affected, 15 warnings (0.00 sec) Records: 5 Deleted: 0 Skipped: 0 Warnings: 15 mysql> show warnings; +---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1265 | Data truncated for column 'mycolumn1' at row 1| | Warning | 1265 | Data truncated for column 'mycolumn2' at row 1| | Warning | 1265 | Data truncated for column 'mycolumn3' at row 1| | Warning | 1265 | Data truncated for column 'mycolumn1' at row 2| | Warning | 1265 | Data truncated for column 'mycolumn2' at row 2| | Warning | 1265 | Data truncated for column 'mycolumn3' at row 2| | Warning | 1265 | Data truncated for column 'mycolumn1' at row 3| | Warning | 1265 | Data truncated for column 'mycolumn2' at row 3| | Warning | 1265 | Data truncated for column 'mycolumn3' at row 3| | Warning | 1265 | Data truncated for column 'mycolumn1' at row 4| | Warning | 1265 | Data truncated for column 'mycolumn2' at row 4| | Warning | 1265 | Data truncated for column 'mycolumn3' at row 4| | Warning | 1265 | Data truncated for column 'mycolumn1' at row 5| | Warning | 1265 | Data truncated for column 'mycolumn2' at row 5| | Warning | 1265 | Data truncated for column 'mycolumn3' at row 5| +---------+------+-----------------------------------------------+ 15 rows in set (0.01 sec) こんな状態です。ちなみに、mycolumn1,2,3のカラムは、 日本語を格納する為のカラムで、varchar(255), text型です。 他のカラムには英数字データが入るのですが、そちらは成功しています。 上記Warning文を見た限りでは、MySQLによりデータが加工されている ようですが。。。。 この問題を解決する為に、他に設定するべきことや、 必要なコマンドがありますでしょうか? またコマンドラインからの、mysqlimportも同様に失敗しました。 日本語テキストのインポートによるテーブルデータ格納は MySQLの仕様的に可能かと思われますが、上記問題がおきてしまいました。 お気付きありましたら、ご指摘いただけたら助かります。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hrm_mmm
- ベストアンサー率63% (292/459)
truncated =「切りつめた」なので、文字数オーバーなのでは? eucでは、全角一文字につき2バイトだから、全て全角で入力されているとして (255byte )/2 ≒ 127文字までかな? そして、最後の128文字目は、半分にされてしまうので、文字としてきちんと表示できなくなります。 http://dev.mysql.com/doc/refman/4.1/ja/storage-requirements.html 全部text型にしてみたら? max 2^16 ≒ 6万バイトまで可能
- mooboogie
- ベストアンサー率68% (28/41)
各行の日本語データを「”」で囲こみ、「ENCLOSED BY '"'」オプションを加えたLOAD DATA INFILEコマンド発行を試してみてください。 私も毎日、日本語データを含むLOAD DATA INFILEコマンドを使用していますが、まったく問題が起きません。
お礼
mooboogie様 ご回答、誠にありがとうございました。 ENCLOSED BYをつけてやってみました。 しかし。。。 全ての文字列格納箇所を、text型にし、 mysql> LOAD DATA INFILE "/var/www/data/hoge.csv" INTO TABLE hoge_table FIELDS TERMINATED BY '\t' ENCLOSED BY '"'; してみたのですが、やはり、EUCJPの日本語のカラムだけ、失敗して しまいます。。。尚日本語は”で括りました。 テキストファイルは次の内容です。 haitta<tab>"あいう"<tab>"かきく"<tab>"さしす"<tab>1 クエリ結果: Query OK, 1 row affected, 3 warnings (0.01 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 3 ※hoge1, hoge2, hoge3は、各々text型。 Warning (Code 1265): Data truncated for column 'hoge1' at row 1 Warning (Code 1265): Data truncated for column 'hoge2' at row 1 Warning (Code 1265): Data truncated for column 'hoge3' at row 1 mysql> select * from hoge_table; +-----------+-------+----------+--------+------+ | id | hoge1 | hoge2 | hoge3 | no | +-----------+-------+----------+--------+------+ | haitta | | | | 1 | +-----------+-------+----------+--------+------+ 1 row in set (0.00 sec) 改めて調査してみます。 いずれにせよ、参考になるご回答ありがとうございました。 御礼申し上げます。 (多分自分のやり方に、自分で気付いていない何か問題があるはずなのですが。。ちなみにMySQLはapt-get installでインストールしており、 変えたところは、/etc/my.cnfを配置して、default-charsetいじったぐらいだったかと思うのですが。。。)
お礼
hrm_mmm様 ご回答、誠にありがとうございました。 ですよね、、、しかし、日本語で7文字のデータが、 text型なのに、なぜかトランケートされてしまうのです。。。 Warning (Code 1265): Data truncated for column 'hoge' at row 1 むー、なぞですね。 多分自分のやり方に、どこかDoubtがある気がしますが。 ただInsert into ~でTerminalからコピペすると、問題なく格納されるのです。。。 改めて調査してみます。 参考になりました、ありがとうございました。