mysql - 在数据库升级后在 MySQL 中选择一个枚举不起作用,为什么?

标签 mysql sql select enums syntax-error

我目前正在将一个基于 PHP 的大型 Web 应用程序从一台服务器迁移到另一台服务器。旧服务器运行 MySQL 5.0.51a(在 SuSE Linux 上),新服务器运行 MySQL 5.5.15(在 ArchLinux 上)。

现在,新的 MySQL 正在提示以下语句(语法错误):

SELECT DISTINCT(field) FROM config WHERE range='global' ORDER BY field

我做了一些测试,发现以下缩短的语句仍然失败(语法错误):

SELECT * FROM config WHERE range='global'

不幸的是,这对我来说看起来像是完全合法的 SQL。我的猜测是它与 range 列的类型有关,即 enum('global', 'user')。从其他列中选择,例如int 类型的列,工作得很好。

我知道如何在本地解决这个问题,即将列名添加到 where 子句中,如下所示:

SELECT * FROM config WHERE config.range='global'

但我不想遍历整个代码,在适当的地方向 SQL 语句添加列名。


因此我的问题:

如何让 MySQL 5.5.15 接受有点草率的 5.0.51a 语法?

最佳答案

RANGE 是 mysql 5.5 中的保留字 see list

保护你的领域,它会起作用:

SELECT * FROM `config` WHERE `range`='global'

关于mysql - 在数据库升级后在 MySQL 中选择一个枚举不起作用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428836/

相关文章:

php - MySQL全文搜索仅过滤匹配的单词包含结果

java - 如何将 NetBeans 连接到 MySQL 数据库?

mysql - SQL Server - (AdventureWorks) 列出没有产品的供应商

php - PDO 查询始终返回 1 或 true

python - 带有 WHERE 条件值列表的 pandas read_sql

mysql - 如何使用 CASE 语句获取空结果集?

sql - 不是触发,而是无限循环吗?

SQL/SQL-LITE - 过滤后统计记录

mysql - 将数据从一列插入到另一列的末尾,不包括插入的部分

select - DB2:通过干扰 Select 子句中的子查询进行分组