mysql - 删除带有感叹号和反引号的数据库

标签 mysql sql

我正在尝试删除其中包含特殊字符 (!`) 的数据库。

MySQL [test]> show databases;
+-------------------------+
| Database                |
+-------------------------+
| d1                      |
| d2                      |
| db1`; select 'oops!'    |
MySQL [test]> drop database `db1\`\; select \'oops!\'`;
ERROR: Unknown command '\;'.
ERROR: Unknown command '\''.
ERROR: Unknown command '\''.
    `> Ctrl-C -- exit!
Aborted
MySQL [test]> drop database "db1`; select 'oops!'";
ERROR 1064 (HY000): [33792] syntax error: syntax error near ""db1`; select 'oops!'""
LINE: drop database "db1`; select 'oops!'"
                    ^

我尝试转义这些字符,但它并没有删除我。包含双引号会引发语法错误。我尝试了 MySQL 5.6/5.7。

最佳答案

要转义反引号,您需要将其加倍(请参阅 manual )。其他字符不需要转义:

DROP DATABASE `db1``; select 'oops!'`

如果您可以控制SQL_MODE,则可以设置ANSI_QUOTES并将字符串括在双引号中:

SET SQL_MODE = 'ANSI_QUOTES';
DROP DATABASE "db1`; select 'oops!'"

关于mysql - 删除带有感叹号和反引号的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61095778/

相关文章:

php - 仅对所有 4 个表成功插入或根本不插入

MySQL - 寻找接近匹配

mysql - 从 Cassandra 中提取数据以加载到关系数据库中的机制

php - 如何: Dynamic 7 day forecast calendar loops - PHP, MySQL

sql - MySQL 设计问题 - 长表和多个数据库哪个更好?

sql - 仅当表中尚不存在记录时插入记录

php - 使用坐标对查找半径的存储过程

mysql - SQL选择逻辑

mysql - DB 切换到 Idle 状态后出现错误 PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR

sql - DB2:如何查找表或表列表中是否存在列?