1
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

4

1 回答 1

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 字符串和标识符上使用哪些类型的引号的参考,请参阅此问题。虽然是 PHP 相关的,但大部分还是和这里相关的。

一般来说,对于这种情况,我建议不要-在数据库名称中包含 a 。您将始终必须在每种情况下都用反引号引用它,而不仅仅是通过 Bash。坚持[0-9,a-z,A-Z$_]使用标识符的集合,以节省您未来的麻烦。

于 2013-09-08T14:04:08.310 回答