使用LOAD DATA LOCAL INFILE导入数据时触发Bash语法错误求助
解决LOAD DATA LOCAL INFILE执行时的bash语法错误
这个错误的根源很明确——bash把你SQL语句里的(当成了shell的特殊语法(比如用于创建子shell),直接解析导致语法出错。要解决这个问题,你只需要把整个SQL语句用引号包裹起来,让bash把它当作一个完整的参数传递给mysql命令,而不会去解析里面的特殊字符。
修正后的命令
推荐用单引号包裹SQL语句(这样里面的双引号不需要转义,更简洁):
mysql -u user -p<pwd> -h <server> --local-infile bsm -sse 'LOAD DATA LOCAL INFILE "/tmp/file.txt" INTO table test_jan2 FIELDS terminated by "|" LINES terminated by "\n" (value1,value2,value3) set id = NULL;'
如果你偏好双引号,记得转义里面的双引号:
mysql -u user -p<pwd> -h <server> --local-infile bsm -sse "LOAD DATA LOCAL INFILE \"/tmp/file.txt\" INTO table test_jan2 FIELDS terminated by \"|\" LINES terminated by \"\n\" (value1,value2,value3) set id = NULL;"
额外注意事项
- 安全提示:直接在命令行写密码
-p<pwd>会导致密码留在shell的命令历史里,建议改成只写-p,然后交互式输入密码,更安全。 - 字段处理:你的表结构里还有
date_created字段,当前语句没有对它做任何处理,因为它允许为NULL,所以导入时会自动设为NULL。如果需要给这个字段赋值(比如设置为当前时间),可以在set子句里加上date_created = NOW(),修改后的SQL部分如下:LOAD DATA LOCAL INFILE "/tmp/file.txt" INTO table test_jan2 FIELDS terminated by "|" LINES terminated by "\n" (value1,value2,value3) set id = NULL, date_created = NOW();
内容的提问来源于stack exchange,提问作者noob_coder
相关产品推荐
相关产品推荐

