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
答案 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$_]
标识符集,以避免将来的头痛。