web-dev-qa-db-ja.com

空のフィールドを含むCSVをインポートするときのMySQLエラー

エクスポートされたテーブルを含む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ファイルを変更せずにテーブルをロードするように設定を変更することはできますか?

5
R. Nec

このような何か、 ''のすべての値をチェックし、代わりに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 の構文を確認してください。

5
jynus

「|」があったフィールドセパレータ。 || vimのような優れたエディターでcsvを開き、|| |\N |。はい大文字のN。これは、チュートリアルで使用するように言ったものです。 vimの場合:
:% s/||/|\\N|/gc

gcは「グローバル」「確認」です。
私の場合、2つの空白のフィールドが一緒にありました:|||
何らかの理由でVimが最初に行うのは、そのため、コマンドをもう一度実行する必要があり、2番目になりました。

次に、mysqlがファイルをロードしました。

0
Howard_L