mysql db在bash脚本中创建时出错

时间:2013-09-08 13:21:30

标签: mysql bash

mysql -u root -p"$MYSQL_ROOT_PASS" -e "CREATE DATABASE IF NOT EXISTS $MYSQL_DB; GRANT ALL PRIVILEGES ON  $MYSQL_DB.* TO $MYSQL_DB@localhost;"

打印此错误:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-simple' at line 1

db name是losk_net-simple_ru

1 个答案:

答案 0 :(得分:2)

由于您的数据库名称包含连字符-,因此您需要对其进行反引号引用。为了在双引号Bash字符串中成功地执行此操作,要围绕变量进行扩展,您需要反斜杠 - 转义反引号。

稍后,您将重用变量$MYSQL_DB作为用户名。在该上下文中,它必须作为字符串单引号'$MYSQL_DB'

mysql -u root -p"$MYSQL_ROOT_PASS" -e "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DB\`; GRANT ALL PRIVILEGES ON \`$MYSQL_DB\`.* TO '$MYSQL_DB'@localhost;"
#------------------------------------------------------------------^^^^^^^^^^^^^^^^^-------------------------------------------^^^^^^^^^^^^

然而,在测试此执行时,我会收到:

  

第1行的错误1470(HY000):字符串'losk_net-simple_ru'对于用户名来说太长(应该不超过16)

因此,如果遇到类似错误,则必须选择与数据库名称不同的用户名。

有关在MySQL字符串和标识符上使用什么类型的引号的参考,请参阅this question。虽然它与PHP有关,但大部分仍与此相关。

通常,对于这种情况,我建议不要在数据库名称中包含- 总是必须在每个上下文中引用它,而不仅仅是通过Bash。坚持使用[0-9,a-z,A-Z$_]标识符集,以避免将来的头痛。