エクスポートされたテーブルを含むCSVファイルがあり、値を含まないフィールドを持つ行があります。列は「、」を使用して区切られ、フィールドに値がない場合は次のようになります:,次のコードを使用してデータをロードしようとしました:
LOAD DATA INFILE "C:/table.csv"
INTO TABLE target_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
ターゲットテーブルの列(このCSVファイルのデータが読み込まれる)はnull可能ですが、サーバーはエラーを返します:
"Incorrect integer value"
CSVファイルのカンマの間にNULLを置くと、サーバーはエラーを返しません。 CSVファイルを変更せずにテーブルをロードするように設定を変更することはできますか?
このような何か、 ''のすべての値をチェックし、代わりにNULLを挿入すると役立つ場合があります。テーブルの実際の名前と行数に応じてa、b、c、dを変更します。
$ cat /tmp/test.csv
test1, test2, test3, test4
,,,
1,2,3,4
,,,
mysql> LOAD DATA INFILE "/tmp/test.csv" INTO TABLE test.test
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@a, @b, @c, @d)
SET a = IF(@a = '', NULL, @a),
b = IF(@b = '', NULL, @b),
c = IF(@c = '', NULL, @c),
d = IF(@d = '', NULL, @d);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test.test;
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
| NULL | NULL | NULL | NULL |
| 1 | 2 | 3 | 4 |
| NULL | NULL | NULL | NULL |
+------+------+------+------+
3 rows in set (0.00 sec)
詳細は LOAD DATA
の構文を確認してください。
「|」があったフィールドセパレータ。 || vimのような優れたエディターでcsvを開き、|| |\N |。はい大文字のN。これは、チュートリアルで使用するように言ったものです。 vimの場合::% s/||/|\\N|/gc
gcは「グローバル」「確認」です。
私の場合、2つの空白のフィールドが一緒にありました:|||
何らかの理由でVimが最初に行うのは、そのため、コマンドをもう一度実行する必要があり、2番目になりました。
次に、mysqlがファイルをロードしました。