无法创建列名为e.test2的表

时间:2016-08-06 11:21:42

标签: sql postgresql

大家好,我需要一些帮助,

是否可以创建列名为e.test的表?因为我遇到了错误 ERROR: syntax error at or near "." SQL state: 42601 示例如下

create table test(e.test2 int)

2 个答案:

答案 0 :(得分:2)

我不建议您为其中包含句点的列命名。请认真考虑使用下划线:

create table test(e_test2 int)

在列中包含特殊字符只是一种痛苦。

如果您想了解为什么这是一个坏主意,请使用双引号:

create table test("e.test2" int)

每当引用该列时,您都必须使用双引号。

答案 1 :(得分:0)

Gordon回答的一些补充:

除了表名或列名中的下划线外,永远不要使用特殊字符。避免表或列名称中的点有几个原因。

点是SQL语法中的保留字符,用于表示 database.table.column

中的限定名称

您可能希望在某些包含多个“图层”的应用程序中使用您的数据库。如果您在至少一个其他图层中的表格或列名称中出现问题,则可能会遇到问题。

即。 Hibenate使用点作为分隔符。来自Hibernate docs

  

@FieldResult名称由的属性名称组成   关系,后跟一个点(“。”),后跟名称或   主键的字段或属性。

如果要在C,C ++或Java应用程序中使用数据库:这些语言不允许类或类成员(字段)名称中的点(此处的点也用作分隔符)。

因此,您必须在数据库和应用程序之间反复翻译名称。

最后并非最不重要:加入。想象一下,下面示例中的一列将包含一个点(即fir.stname)。我没有试过这个,但我打赌你的数据库会扼杀它。除此之外,它令人困惑。

SELECT person.firstname, person.lastname, address.city
FROM from person
INNER JOIN address
ON person.id = address.person;

TL; DR 如果您翻译表格/列字段并使用引文,则可以解决这些问题。但是如果只是在表/列名称中使用英文字母和下划线,你可以省去很多麻烦。

  

如何为列名使用空格?

我不会那样做。我会使用下划线而不是空格。

希望有所帮助。