8

何千ものレコードを含むCSVファイルがあります。これらの行をphpmyadminを介してMySQLテーブルにインポートしたいと思います。使用するコマンドは次のとおりです。

load data local infile '/var/www/html/deansgrads_201280.csv' 
into table ttu_nameslist
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
(firstname, middlename, lastname, city, county, state, termcode, category)

自動インクリメントに設定されているIDフィールドがテーブルにあります。このSQLを実行すると、最初の行のみがテーブルにインポートされます。

入力データファイル行:

"Aaron","Al","Brockery","Cookeville","Putnam","TN","201280","deanslist"
"Aaron","Dan","Mickel","Lebanon","Wilson","TN","201280","deanslist"

テーブル構造:

CREATE TABLE `ttu_nameslist` (
  `id` int(11) NOT NULL,
  `firstname` varchar(50) NOT NULL,
  `middlename` varchar(50) NOT NULL,
  `lastname` varchar(50) NOT NULL,
  `city` varchar(50) NOT NULL,
  `county` varchar(50) NOT NULL,
  `state` varchar(2) NOT NULL,
  `termcode` varchar(6) NOT NULL,
  `category` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1

何が間違っているのですか?1行追加した後に終了するのはなぜですか?

4

4 に答える 4

9

IDフィールドに属性があると言いますが、ステートメントにはそのAUTO_INCREMENT属性についての言及がありません。CREATE TABLEこれは問題の一部です。

他の部分は、それらの切り捨ての警告です。CSVファイルの一部の行には、長すぎて列に収まらないデータが含まれている可能性があります。これらのテキスト列のサイズをより大きな値(たとえば200)に増やして、再試行してください。

CSVファイルが有効であることを絶対に確信していますか?(別名、各行には同じ数の値などがあります)。これらの文字列にコンマ()が含まれているかどうかを確認する必要が,ありますが、問題になることはありません。

于 2013-01-31T14:51:54.707 に答える
6

MySQL LOAD DATA INFILEコマンドが1行しかロードしないのはなぜですか?

何が起こっているのかというと、最初の列を正常にロードし、次に2番目の列をロードすると、が一意のインデックス制約に違反しているために失敗します。

MySQLLOAD DATA LOCAL INFILEは列に一意のインデックスを適用し、警告をログに記録することなく、問題のある重複行を何もせずにスキップします。

この現象を再現する方法:

  1. intおよびvarchar列を持つテーブルを作成します。

    mysql> create table foo(id INT, mytext VARCHAR(255));
    Query OK, 0 rows affected (0.02 sec)
    
  2. varchar列に一意性制約を追加します。

    mysql> alter table foo add constraint my_epic_constraint unique(mytext);
    Query OK, 0 rows affected (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  3. タブで区切られた入力テキストファイル/tmp/foo.txtを作成します。これは、一意の制約に違反します。

    1   fred
    2   fred
    
  4. インポートしてみてください:

    mysql> load data local infile '/tmp/foo.txt' into table foo fields 
           terminated by '\t' lines terminated by '\n' (@col1,@col2) 
           set id=@col1, mytext=@col2;
    
    Query OK, 1 row affected (0.01 sec)
    Records: 2  Deleted: 0  Skipped: 1  Warnings: 0
    

バム!あなたの問題があります:なぜそれは1行だけをインポートするのですか?データファイルの行が違反した一意のキー制約があるためです。

ソリューション:

  1. テーブルの一意キー制約を削除して、再試行してください。

  2. テキストファイルに移動し、一意の制約に違反する重複行を削除します。

于 2014-01-03T22:29:53.523 に答える
4

同じ問題が発生し、'\ r\n'の代わりに二重引用符"\r\n"を使用して解決しました

于 2015-04-23T02:42:02.587 に答える
1

興味のある人のために、私は上記と同じ問題を抱えていましたが、それはLINES TERMINATED BYの割り当て、主キー違反、または間違った文字セットとは何の関係もありませんでした。

MySQL 8にアップグレードした後、このエラーが発生し始めました。問題は、col_name_or_user_varオプションを介して送信していた列名でした。元々、インポートファイルに使用していない余分な列がありましたが、これによって元の実装に問題は発生しませんでした。ただし、アップグレード後、これらの列を機能させて複数の行をインポートするには、これらの列に変数エントリを追加する必要がありました(import.csvでこれらの列を変更するためのアクセス権がありませんでした)。次のようなインポートファイルを使用します。

FIELD_1, FIELD_2, FIELD_3, FIELD_4, FIELD_5

私はから行かなければなりませんでした:

LOAD DATA INFILE 'import.csv'
INTO TABLE tableName
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
(FIELD_1, FIELD_2, FIELD_3)

に:

LOAD DATA INFILE 'import.csv'
INTO TABLE tableName
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
(FIELD_1, FIELD_2, FIELD_3, @FIELD_4, @FIELD_5)
于 2020-01-23T19:30:55.070 に答える