gpt4 book ai didi

带有破折号的 MySQL 模式名称不允许我执行命令行查询

转载 作者:行者123 更新时间:2023-11-29 00:02:11 25 4
gpt4 key购买 nike

我创建了一个 shell 脚本来自动化我的数据库从主机到主机的迁移,它将我的多 WordPress 站点表提取到单独的 sql 文件中,因此我可以决定每次迁移哪个站点。

所以在我的 shell 脚本中我有以下代码:

schema="internet-safe"
PROJECT_FOLDER_NAME="internet-safe"
vagrant_export_folder="/var/www/projects/${PROJECT_FOLDER_NAME}/database/tmp"

query="mysql -uroot -proot -e \"SELECT blog_id AS ID, path AS Slug FROM ${schema}.wp_blogs "
query="$query INTO OUTFILE '$vagrant_export_folder/blogs.csv' "
query="$query FIELDS TERMINATED BY ',' "
query="$query ENCLOSED BY '\\\"' "
query="$query LINES TERMINATED BY '\n' \" > /dev/null"

vagrant ssh --command "cd $vagrant_export_folder && $query"

但是通过执行这个脚本我得到了以下错误:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-safe.wp_blogs  INTO OUTFILE '/var/www/projects/internet-safe/database/tmp/blogs' at line 1

到 127.0.0.1 的连接已关闭。

问题是架构名称 internet-safe 中的破折号。有办法解决这个问题吗?

我知道有一个选项可以重命名架构,但不幸的是,我在 xUbuntu 上运行不稳定的 Vagrant ,它已经多次破坏我的数据库,而我试图在我的数据库中提供修改。

我也尝试了以下组合,但我收到如下错误消息:

`${schema}`.`wp_blogs`


ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO OUTFILE '/var/www/projects/internet-safe/database/tmp/blogs.csv' FIELDS TE' at line 1


`${schema}`.wp_blogs


ERROR 1046 (3D000) at line 1: No database selected



`${schema}.wp_blogs`


ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO OUTFILE '/var/www/projects/internet-safe/database/tmp/blogs.csv' FIELDS TE' at line 1

最佳答案

最好的选择当然是简单地重命名您的数据库。

通常当特殊字符出现在模式/表/列名称中时,您可以使用反引号来解决这个问题。不幸的是,由于您正在尝试运行 shell 脚本,它会将反引号内的任何内容解释为命令。

在 MySQL 中你可以设置 sql_mode "ANSI_QUOTES"。以管理员/root 身份(在 MySQL 中)使用

mysql> SET GLOBAL sql_mode="ANSI_QUOTES";

首先检查,如果你已经设置了任何模式

mysql> SHOW VARIABLES LIKE 'sql_mode';

如果已经设置了模式,请将它们包含在 SET GLOBAL sql_mode 语句中(由 , 分隔)。

您还可以在my.cnf 文件中设置此选项,以便每次启动MySQL 服务器时应用此模式。

效果是," 也允许作为标识符引号字符。但是要小心,不要在查询中使用 " 来指定任何文本,请使用在那里使用单引号。

  • 了解更多信息 here

关于带有破折号的 MySQL 模式名称不允许我执行命令行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29275441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com