在powershell上将命令传递给mysql的正确语法是什么?

时间:2017-06-15 00:14:16

标签: mysql powershell

我有一个mysql命令(我已经验证了正确的语法),用于将CSV文件加载到我的数据库中,即

LOAD DATA LOCAL INFILE '$DoublePath\\tempFiles\\preupload.csv' INTO TABLE $DataTable FIELDS TERMINATED BY ',' ENCLOSED BY '`"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

其中$ DoublePath是路径的一部分(我已经证实它是正确的)并且$ DataTable是我的表名。 当我在mysql控制台中运行它时,它完全按预期运行将所有内容加载到数据库中而没有问题,但是,当我尝试通过powershell运行此命令时,根据我的操作会发生各种各样的事情。

如果我使用--execute(或-e)使用以下语法执行它:

& mysql -u $Username -h $Address --password=$Password $Database --execute="`"$SQLUploadString`""

然后MySQL说用法不正确,并显示使用页面

当我像这样运行时:

& echo `"$SQLUploadString`" | mysql -u $Username -h $Address --password=$Password $Database

然后mysql声明:

ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'IGNORE' (0)

这个问题已经让我快上线了近一个星期了,如果我能在这里弄清楚我做错了什么,我会很高兴。

2 个答案:

答案 0 :(得分:2)

解决这个问题的方法是简单地将命令写入文件,然后将文件传输到mysql中,如下所示:

& echo "$SQLUploadString" > $LocalPath\cmd.txt
& cat $LocalPath\cmd.txt | mysql -u $Username -h $Address --password=$Password $Database

答案 1 :(得分:1)

LINES TERMINATED BY '\r\n' IGNORE ...

问题出在这里。你需要转义行终止符字符串:否则shell会对它们进行转义处理,因此以下IGNORE被视为一个新行,因此是一个新的MySQL命令。