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

时间:2011-09-15 09:40:26

标签: 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语法?

1 个答案:

答案 0 :(得分:1)

RANGE是mysql 5.5 see list

中的保留字

保护你的田地,它可以工作:

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