【问题标题】:Is "type" and "status" a reserved word in MySQL?“类型”和“状态”是 MySQL 中的保留字吗?
【发布时间】:2013-05-11 16:25:54
【问题描述】:

我在 MySQL 手册中的保留字中找不到这些字词,但显然 phpMyAdmin 说它们是保留字:

【问题讨论】:

  • 真的,手册中没有提到这些词。但是因为它们是带有“意义”的词,所以它的使用受到限制。我已经用这些创建了表格,如果这不妨碍他操纵它们,就直接忽略。
  • @PiLHA:关键是保留字不能用作不带引号的SQL标识符;而这些词可以。 phpMyAdmin 声明这些词是保留的是不正确的。
  • @eggyal 据我所知,在 SQLServer 中和在 MySQL 中一样。使用术语的最大限制是添加''或[]并解决。 Bug 与否,使用。
  • 我注意到现在,在 phpMyAdmin 4.0.5 中,这个问题已经解决了。像typestatus 这样的词不再显示消息。此外,“MySQL 允许用作不带引号的标识符”的保留关键字,例如 datetimestamp,也不再有通知,尽管它们曾经有。 (我想它可能与那些一起去)

标签: mysql phpmyadmin


【解决方案1】:

从技术上讲,这是 phpMyAdmin 中的一个错误。来自libraries/sqlparser.data.php

/**
 * words forbidden to be used as column or table name wihtout quotes
 * as seen in http://dev.mysql.com/doc/mysql/en/reserved-words.html
 *
 * @global array MySQL forbidden words
 */
$PMA_SQPdata_forbidden_word = array (

(列表包括'STATUS''TYPE',显然不在参考手册页上)。

Bug #948 识别出当时 phpMyAdmin 将某些列名(包括STATUS)大写,因为(错误地)被识别为该列表中的保留字;结果,这些关键字最初是列表中的removed,但该提交随后是reversed,对于the reasons explained by Alexander Turek

您的修复搞砸了漂亮的打印机! 这是一个分析器问题。

FIRST 和 STATUS 已在此保留字数组中 因为它们是 MySQL 命令的一部分。 STATUS 用于“SHOW STATUS”和 FIRST 部分 ALTER 语法。

此外,这个错误影响的单词远不止这些 状态和第一。我不想知道如果我们 将它们全部从保留字数组中删除...

由于您的更改,两个查询都没有很好地突出显示 没有了。

也就是说,phpMyAdmin 使用相同的单词列表在其漂亮的打印机中进行语法突出显示,就像它用于检测保留字一样;这是错误的,会导致您观察到警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多