从分隔文件导入时,mysqlimport NULL 值

mysqlimport NULL values when importing from delimited file

我正在 运行宁 mysql导入以加载数据,但我遇到空值未加载为 null 的问题。我正在使用 mysql 5.7.23

可以通过创建名为 mytable.psv 的文件来重现问题,其中包含:

code|date_a|date_b
1|2018-11-27|2018-11-27
2|2018-11-27|

然后 运行 命令:

mysql -u root -e "CREATE DATABASE mydb"
mysql -u root -e "USE mydb; CREATE TABLE mytable (code varchar(15) NOT NULL, date_a date NOT NULL, date_b date);"
mysqlimport --ignore-lines=1 --fields-terminated-by='|' --columns="code,date_a,date_b" --local -u root mydb mytable.psv
mysql -u root -e "USE mydb; SELECT * FROM mytable;"

输出为:

mydb.mytable: Records: 2  Deleted: 0  Skipped: 0  Warnings: 1
+------+------------+------------+
| code | date_a     | date_b     |
+------+------------+------------+
| 1    | 2018-11-27 | 2018-11-27 |
| 2    | 2018-11-27 | 0000-00-00 |
+------+------------+------------+

您可以看到第二行的 date_b 是空的,我需要它为空,但它会转换为 0000-00-00。这打破了我进一步需要的限制。从分隔文件导入数据时,有没有办法确保空值是 null?

我能够在这里找到答案: https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html#option_mysqlimport_lines-terminated-by https://dev.mysql.com/doc/refman/8.0/en/load-data.html 您需要字符 '\N' 来导入空值,因此在上面的示例中它将是:

code|date_a|date_b
1|2018-11-27|2018-11-27
2|2018-11-27|\N

只是为了补充 Antonio 的回答,如果像我一样,您必须以编程方式将 \N 插入缺失字段以在导入时为 csv 文件转储保留 NULL 值,您可能需要包括 --fields-terminated -by=',' 或任何你的终止符,因为如果你不这样做,mysqlimport 会将 \N 误解为字段终止符或行终止符,即使在行的中间也是如此。