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
数据库名称是 losk_net-simple_ru
最佳答案
由于您的数据库名称包含连字符 -
,因此您需要将其反引号括起来。为了在双引号 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;"
#------------------------------------------------------------------^^^^^^^^^^^^^^^^^-------------------------------------------^^^^^^^^^^^^
然而,在测试此执行时,我收到:
ERROR 1470 (HY000) at line 1: String 'losk_net-simple_ru' is too long for user name (should be no longer than 16)
因此,如果遇到类似错误,您必须选择与数据库名称不同的用户名。
有关在 MySQL 字符串和标识符上使用什么类型的引号的引用,请参阅 this question .虽然它是 PHP 相关的,但大部分内容在这里仍然相关。
一般来说,对于这种情况,我建议不要在数据库名称中包含 -
。您将总是必须在每个上下文中反引号,而不仅仅是通过 Bash。坚持使用 [0-9,a-z,A-Z$_]
集合作为标识符,以免日后头疼。
关于mysql - 在 bash 脚本中创建 mysql db 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684141/