繁体   English   中英

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

[英]Is it possible to set MySQL session variables using mysqlimport?

我有一个使用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

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

由于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*/

这是LOAD DATA INFILE手动输入

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

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

这就是MySQL文档对此的评价。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM