【问题标题】:"Syntax error at or near END" with column name END列名为 END 的“在 END 处或附近出现语法错误”
【发布时间】:2014-05-07 12:55:44
【问题描述】:

我在 MYSQL 中有一个表,必须在 postgresql 中进行转换。

我正在使用下面的命令来创建表格。

create table emp(COMPLETE BOOLEAN NOT NULL, END BOOLEAN NOT NULL);

我得到的错误是

命令行错误:27 列:1 错误报告 - SQL 错误:错误: “END”位置或附近的语法错误:45

但是如果我将列名 END 更改为 END1,那么它工作正常。

create table emp(COMPLETE BOOLEAN NOT NULL, END1 BOOLEAN NOT NULL);

请提出一种方法,通过它我可以使用 END 创建列的名称。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    END 是一个关键字。 (除其他外,它在CASE ... WHEN ... END 中使用)。您必须引用它才能将其用作标识符。

    create table emp(complete BOOLEAN NOT NULL, "end" BOOLEAN NOT NULL);
    

    请注意,"quoted" 标识符区分大小写,它们不像未加引号的标识符那样大小写折叠。这是根据 SQL 标准。欲了解更多信息,see the PostgreSQL documentation on lexical structure

    有一个list of reserved words in the documentation

    【讨论】:

      【解决方案2】:

      使用关键字作为表名时会出现问题。最好的方法是使用其他名称。

      【讨论】:

        【解决方案3】:

        请为您的列选择其他名称,因为 END 是关键字。而且我们不能使用与关键字相同的列名。

        【讨论】:

        • 这不是真的,您可以使用关键字或保留字作为列名。不过,我同意您通常不应该这样做。
        【解决方案4】:

        您正在使用 SQL 保留字作为变量名。为了您的最大便携性 数据管理器之间的应用程序,您不应使用此列表中的任何保留字 作为文件类或变量名。 你甚至可以使用 _END ,END1 ... 这是 SQL 的保留字列表。 http://www.tigerlogic.com/tigerlogic/omnis/download/manuals/SQLReservedWords.pdf

        【讨论】:

        • 请注意,每个 DBMS 也会添加自己的保留字。所以如果你真的想要便携,你应该引用所有的东西,并将你使用的所有数据库产品设置为使用 ANSI 引用模式。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-03
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 2021-04-23
        相关资源
        最近更新 更多