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

标签 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

数据库名称是 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/

相关文章:

mysql - 如何在下面的示例中正确执行 SQL 中的计数

mysql - 更新 MySQL : Duplicate unique key #1062

mysql - 错误 : mysqld. exe:表 '.\mysql\event' 被标记为已崩溃,应进行修复

bash - 如何在 bash 中完成逻辑或

bash脚本将字符串 append 到同一目录中的多个文件

arrays - 如何将数组传递给 bash shell 脚本?

mysql - DBVisualizer 不显示 SP 源代码

php - 如何在页面提交和重新加载后保留复选框的选中状态?

regex - 仅当字符串存在于特定列中时才打印行

windows - BASH:确定脚本是从虚拟机(Ubuntu)还是W10 bash应用程序调用的?