是否可以使用mysqlimport设置MySQL会话变量?

问题描述 投票:3回答:2

我有一个使用unix的mysqlimport的导入作业,并且源数据是不可靠的,所以我需要设置sql_mode =“NO_ENGINE_SUBSTITUTION”,以便在出现错误时作业不会失败。我更愿意为个人工作做这件事,但我不知道是否有可能。有人知道吗?

当前命令:

mysqlimport --compress --fields-terminated-by="," --fields-optionally-enclosed-by='"' --lines-terminated-by="\n" --replace --local --user=username --password=password -h localhost dbname company_data.txt

mysql unix mysqlimport
2个回答
1
投票

我不熟悉mysqlimport,但manual没有列出一个选项。

由于mysqlimport只是LOAD DATA INFILE SQL语句的命令行界面,因此解决方法如下:

mysql -uuser -ppassword dbname -e "set session sql_mode='NO_ENGINE_SUBSTITUTION'; LOAD DATA INFILE 'company_data.txt' INTO ..." /*you can figure out the rest*/

这是manual entry for LOAD DATA INFILE


1
投票

您可以使用LOAD DATA INFILE语句而不是mysqlimport实用程序,这将允许您在DML语句之前设置sql_mode

但是,在加载本地文件(即,LOAD DATA LOCAL INFILE ...)时,设置SQL模式将不起作用。

这就是MySQL documentation对此的看法。

使用LOCAL或IGNORE,即使使用限制性sql_mode值,也会发生警告而不是错误,并使用与非限制性SQL模式相同的最接近值行为插入行。发生这种情况是因为服务器无法在操作过程中停止传输文件。

因此,除非您可以将文件放在与MySQL相同的服务器上,否则在加载该文件时无法确保数据的完整性。

© www.soinside.com 2019 - 2024. All rights reserved.