大佬们帮我看一下这个 sql 的语法问题

2020-02-05 20:01:23 +08:00
 css3

想不进入 mysql 容器内执行 sql 语句(命令行执行是没问题的):

CREATE USER 'root'@'%' IDENTIFIED BY 'abcd1234';
GRANT ALL ON *.* TO 'root'@'%';

宿主机执行:

docker exec -it mysql bash -c 'mysql <<< "CREATE USER 'root'@'%' IDENTIFIED BY 'abcd1234';GRANT ALL ON *.* TO 'root'@'%';"'

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '% IDENTIFIED BY abcd1234' at line 1

报语法错误,引号太多了,我仔细看,感觉也没毛病,但确实是执行不了,各位帮忙看一下,多谢了

1694 次点击
所在节点    程序员
9 条回复
css3
2020-02-05 20:15:54 +08:00
%前加了\也不行😭
MrUser
2020-02-05 20:53:20 +08:00
试试这个:
```
docker exec -it mysql bash -c 'mysql <<< "CREATE USER \'root\'@\'%\' IDENTIFIED BY \'abcd1234\';GRANT ALL ON *.* TO \'root\'@\'%\';"'
```
css3
2020-02-05 20:58:53 +08:00
@MrUser 不行,回车后是个>符号,语句不完整🙃
GM
2020-02-05 21:14:12 +08:00
这种容易由于转义导致的问题,建议弄个 sql 文件,然后 mysql < script.sql 这样使用。
css3
2020-02-05 21:17:25 +08:00
@GM #4 文件确实没问题,主要就是不想增加一个文件😂
GM
2020-02-05 21:43:48 +08:00
@css3 何必跟自己过不去。。。
hcymk2
2020-02-05 21:56:39 +08:00
mysql -e
msg7086
2020-02-06 02:28:12 +08:00
'mysql <<< "CREATE USER '
root
'@'
%
' IDENTIFIED BY '
abcd1234
';GRANT ALL ON *.* TO '
root
'@'
%
';"'

你单引号都没转义,就会被 bash 转义,然后就会变成这样。

我是建议你最外层用双引号,这样就只要转义一对双引号就行了。

docker exec -it mysql bash -c "mysql <<< \"CREATE USER 'root'@'%' IDENTIFIED BY 'abcd1234';GRANT ALL ON *.* TO 'root'@'%';\" "

这样试试看。
css3
2020-02-06 08:50:57 +08:00
@msg7086 非常感谢,有用!!!👍👍👍👍👍👍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/642366

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX