【问题标题】:SELECTing an enum in MySQL not working after database upgrade, why?数据库升级后在 MySQL 中选择枚举不起作用,为什么?
【发布时间】:2011-09-15 09:40:26
【问题描述】:

我目前正在将一个基于 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 语法?

【问题讨论】:

  • 只是说“语法错误”,还是有更详细的错误描述?

标签: mysql sql select enums syntax-error


【解决方案1】:

RANGE 是 mysql 5.5 中的保留字 see list

保护你的领域,它很有效:

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

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多