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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以使用mysqlimport设置MySQL会话变量?相关的知识,希望对你有一定的参考价值。

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

当前命令:

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

答案

我不熟悉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

另一答案

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

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

这就是MySQL documentation对此的看法。

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

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

以上是关于是否可以使用mysqlimport设置MySQL会话变量?的主要内容,如果未能解决你的问题,请参考以下文章

mysqlimport 发出“set @@character_set_database=binary”,这会阻止加载 json 值

LOAD DATA INFILE & mysqlimport

在文件名与表名不同的地方使用 mysqlimport

Linux基础命令---mysqlimport导入数据库

mysql导出导入

mysqlimport命令