我正在运行mysqlimport来加载数据,并且有一个空值未加载为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。这打破了我需要进一步发展的限制。从分隔文件导入数据时,有没有办法确保空值为空?
答案 0 :(得分:1)
我能够在这里找到答案: 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
答案 1 :(得分:0)
只需添加到Antonio的答案中,如果像我一样,如果您必须以编程方式在丢失的字段中插入\ N以在导入csv文件转储时持久保留NULL值,则可能需要包括--fields-terminated-by =','或其他终止符,因为如果您不这样做,mysqlimport甚至会在一行中间将\ N解释为字段终止符或行终止符。