mysqlimport从分隔文件导入时为空值

uinbv5nw  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(358)

我正在运行mysqlimport来加载数据,并且遇到了空值不能作为null加载的问题。我正在使用MySQL5.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 |
+------+------------+------------+

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

rt4zxlrg

rt4zxlrg1#

我在这里找到了答案:https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html#option_mysqlimport_lines-终止-byhttps://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
tp5buhyn

tp5buhyn2#

为了补充antonio的回答,如果您像我一样,必须通过编程方式在缺少的字段中插入\n以在导入csv文件转储时保留空值,则可能需要包括--以=','或其他终止符结尾的字段,因为如果您不这样做,mysqlimport会将\n误解为字段终止符或行终止符,甚至在行的中间。

相关问题