• ベストアンサー

LOAD DATA INFILE で最初のカラム以外がロードされないで NULL になってしまう

お世話になります。MySQL勉強中の初心者です。 環境: MySQL5.1 OSX10.4 ターミナル (Winでいう「cmdプロンプト」です) 問題: LOAD DATA INFILE でコマンドは通るのですが、select*from でチェックすると第一カラム(左端)だけは正常にロードされるんですが、残りのカラムがすべて NULL となってしまって切ないです。 ロードしたデータの例: 1011 jan c001 a01 1012 jan c001 a01 1013 jan c002 a03 構造としては、こんな感じです。↓ 文字列[tab]文字列[tab]文字列[tab]文字列[空白スペース?] 現在の結果: | 1011 | NULL | NULL | NULL | | 1012 | NULL | NULL | NULL | | 1013 | NULL | NULL | NULL | 今は小規模なデータだけなのでやむなく手打ちでガコガコ入れてますが、原因を解明したいと思います。 どなたかアドバイス頂けると幸いです。宜しくお願いします。orz れざ

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

(1)テーブル名が一致してませんね load data 文 「order_line」 show create table 文 「order1」 (2)LOAD DATA 文がカンマ区切りなのに提示されているデータはTAB区切り。 (3)MAC OSXなのに行区切りに"\r\n" LOAD DATA INFILE '/yos-data/00_mscit/07_db/wk3-asg/order1.txt' INTO TABLE order_line FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'; で試してみては?

laser-disc
質問者

お礼

動きましたー(T.T)!!! (1) はgooに投稿した時の私の打ちミスでした。失礼しました(汗)。 (2) と (3) が主な原因のようです。ご指摘有り難うございました。 MySQL初心者の上に、仕事では Win で正規表現を時たま使うので、Macとの表記の違いがあることに気付きませんでした。勉強になりました。orz

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

以下を補足説明願います。 (1)LOAD DATA INFILE文の具体的な指定内容 (2)表の定義内容 →データ型は必須。show create table文の結果なら、なおいい。 (3)文字コード →show variables like '%char%'の表示結果。  LOAD DATA INFILEを入力しているクライアント(今回は、「OSX10.4 ターミナル」)から入力した結果

laser-disc
質問者

補足

うー、すみません、またお世話になります...。orz (1)LOAD DATA INFILE文の具体的な指定内容(通ります): LOAD DATA INFILE '/yos-data/00_mscit/07_db/wk3-asg/order1.txt' INTO TABLE order_line FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; ロードしたファイル order1.txt -------------------------------------- 1011 jan c001 a01 1012 jan c001 a01 1013 jan c002 a03 1014 jan c003 a03 1015 jan c003 a03 1016 jan c006 a01 1017 feb c001 a06 1018 feb c001 a03 1019 feb c001 a02 1020 feb c006 a03 1021 feb c004 a06 1022 mar c001 a05 1023 mar c001 a04 1024 mar c006 a06 1025 apr c001 a05 1026 may c002 a05 1035 may c006 a06 1036 may c006 a06 1050 may c006 a01 -------------------------------------- (2)表の定義内容 mysql> show create table order1; ----------------------------------------+ | order1 | CREATE TABLE `order1` ( `ordno` char(4) NOT NULL, `month` char(3) DEFAULT NULL, `cid` char(4) DEFAULT NULL, `aid` char(3) DEFAULT NULL, PRIMARY KEY (`ordno`), KEY `cid` (`cid`), KEY `aid` (`aid`), CONSTRAINT `order1_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `customer` (`cid`), CONSTRAINT `order1_ibfk_2` FOREIGN KEY (`aid`) REFERENCES `agent` (`aid`) ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +--------+------------------------------ (3)文字コード mysql> show variables like '%char%'; +--------------------------+------------------------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql-5.1.34-osx10.4-i686/share/charsets/ | +--------------------------+------------------------------------------------------+ LOAD DATA INFILEを入力しているクライアント(今回は、「OSX10.4 ターミナル」)から入力した結果 mysql> select*from order1; +-------+-------+------+------+ | ordno | month | cid | aid | +-------+-------+------+------+ | 1011 | NULL | NULL | NULL | | 1012 | NULL | NULL | NULL | | 1013 | NULL | NULL | NULL | | 1014 | NULL | NULL | NULL | | 1015 | NULL | NULL | NULL | | 1016 | NULL | NULL | NULL | | 1017 | NULL | NULL | NULL | | 1018 | NULL | NULL | NULL | | 1019 | NULL | NULL | NULL | | 1020 | NULL | NULL | NULL | | 1021 | NULL | NULL | NULL | | 1022 | NULL | NULL | NULL | | 1023 | NULL | NULL | NULL | | 1024 | NULL | NULL | NULL | | 1025 | NULL | NULL | NULL | | 1026 | NULL | NULL | NULL | | 1035 | NULL | NULL | NULL | | 1036 | NULL | NULL | NULL | | 1050 | NULL | NULL | NULL | +-------+-------+------+------+ 情報が抜けてないと良いんですが…。宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • LOAD DATA INFILE での関数の扱い

    お世話になります。 LOAD DATA INFILEで扱うデータでNOW()関数を持たせたいのですが、可能でしょうか? 例えば "文字列","文字列","文字列",NOW()\n "文字列","文字列","文字列",NOW()\n というカンマ区切りのデータですが、実行後、属性datetimeの値が0000-00-00 00:00:00となってしまいます。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL の load data infile

    お世話になります。 MySQL のload data infile ... コマンドを使ってCSVファイルをテーブルに転送することをよくやっていますが、このコマンドには現在あるデータはそのままにして、新たにデータを追加するオプションなどはあるのでしょうか? 今までは空のテーブルにデータを転送していただけですが、既にあるデータに上書きすることなく、追加する方法があれば教えていただきたいと思います。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • LOAD DATA INFILE でエラー起きてデータを一括してロードできません。

    はじめまして。 質問があります。 現在WindowsXP Home、MySQL5.0.27を使用しているのですが、 テキストファイルのデータを一括でDBにロードしようとすると、 エラーが起きてしまいます。 ------------------------ Demo01.txt -------------------------- 1,あああ 2,いいい 3,ううう ------------------------ Demo01.sql --------------------------- create table test ( no integer not null, name varchar(30), primary key(no) )type=InnoDB; ---------------------------------------------------------------- mysql> load data low_priority infile 'C:/Demo01.txt' -> replace -> into table test -> fields terminated by ',' -> lines terminated by '/r/n' -> escaped by '\\'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use : 'escaped by '\\'' 付近: 6 行目 ---------------------------------------------------------------- 上記のようなエラーが出てしまいますので、試しにescaped by '\\' を削除して実行すると、 ---------------------------------------------------------------- Query OK, 1 row affected (0.09 sec) レコード数: 1 削除: 0 Skipped: 0 Warnings: 0 ---------------------------------------------------------------- と表示され1行しかロードできません。どうしたら全行をロードするこ とができるのでしょうか?どうかご教授お願いします。

    • ベストアンサー
    • MySQL
  • NULLだったら、aカラムの値をbカラムへコピー

    ■前提 ・MySQLの同じテーブル内に、datetime型の「aカラム」「bカラム」がある ■質問 ・この時、bカラムがNULLだったら、aカラムの値をbカラムへコピーするSQL文を教えてください

    • ベストアンサー
    • MySQL
  • GRANTステートメントによるユーザー追加について(LOAD DATA INFILEの権限)

    GRANTステートメントで、「LOAD DATA INFILE」の権限を持ったユーザ(例:kasai)を作成したいのですが、上手くいきません。 mysql> GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,LOAD DATA INFILE ON *.* TO kasai; ERROR 1064: You have an error in your SQL syntax. Check the manual that corresp onds to your MySQL server version for the right syntax to use near 'LOAD DATA IN FILE ON *.* TO kasai' at line 1 何かよい知恵を教えてください

    • ベストアンサー
    • MySQL
  • MySQLのNOT NULL制約について

    MySQLでは、あるカラムをNOT NULL制約にしていたとしても、文字列型には空文字が、数値型には0を保存できます。 NULL、空文字、0をそれぞれ区別している仕様自体は問題ないと思いますが、NOT NULL制約のようにあるカラムで特定の値を許可しないような設定でできないのでしょうか。

    • ベストアンサー
    • MySQL
  • 日本語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の仕様的に可能かと思われますが、上記問題がおきてしまいました。 お気付きありましたら、ご指摘いただけたら助かります。

  • BitフィールドにLOAD DATAできない

    以下の定義のテーブル(Bitフィールドを持つ)にLOAD DATAでデータを 入れようとしているのですがエラーになり困っています。 マニュアルにあるようにSET句を使用してLOADをしようとしているのですが 「You have an error in your SQL syntax;~」と コマンドの4行目のところで出てしまいます。どこがおかしいのでしょうか。 【テーブルの定義】 mysql> desc data; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | key1 | int(11) | NO | PRI | NULL | | | key2 | int(11) | NO | PRI | NULL | | | date | datetime | NO | PRI | NULL | | | flg1 | bit(1) | NO | | b'1' | | +-------+----------+------+-----+---------+-------+ 【CSVファイルの内容】 1,2,"2016-12-17 10:00:00",1 1,2,"2016-12-17 11:00:00",0 【コマンド】 LOAD DATA INFILE 'C:/csv/data.csv' INTO TABLE test.data (key1, key2, date, @var1) SET flg1 = CAST(@var1 AS SIGNED) FIELDS TERMINATED BY ',' ENCLOSED BY '"';

  • 一つのカラムから、データを分けて取り出す方法

    現在、PHP4とMysql4.1の環境を利用しています。 カラムからのデータ抽出で、うまくいきません。 例えば、カラムに次のような形でデータがあった場合、それをカンマで区切って別々に抽出し、かつ重複を除いてブラウザに表示させるにはどのような方法があるでしょうか。 +-------------+ | A,B,C,A,B,C | +-------------+ 上記配列をDBからmysql_fetch_arrayで取得し、 その後splitして、printしましたが、 ブラウザ上では「array」と表示されてしまいました。 何か方法がありましたら、 ご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • LOAD DATA INFILE の使用について

    サーバにある、CSVファイルをデータベース(mysql)に登録したいです。 $query = "LOAD DATA INFILE '[ファイル名]' INTO TABLE [テーブル名] FIELDS TERMINATED BY ','"; を $result = mysql_query($query); として実行すると、 Access denied for user 'user'@'%' (using password: YES) というエラーになります。 色々検索すると、ユーザーはrootユーザーでないといけない・・・というのを見かけたのですが・・・ 普通のユーザーではLOAD DATA INFILEを使用できませんか? 私は、レンタルサーバを使用していて、レンタルサーバ上からしかユーザーを追加できません。 この場合、LOAD DATA INFILE~ は使用できないのでしょうか? また、もし使用できない場合、代替手段はあるのでしょうか?

    • ベストアンサー
    • PHP
チャンネル数の増加方法
このQ&Aのポイント
  • チャンネル数を増やす方法は何か
  • ひかりTVのサービスやISPぷららでチャンネル数を増やす方法を教えてください
  • チャンネル数を増やすためのおすすめの方法はありますか
回答を見る