是否可以使用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 值