大家好,我需要一些帮助,
是否可以创建列名为e.test的表?因为我遇到了错误
ERROR: syntax error at or near "."
SQL state: 42601
示例如下
create table test(e.test2 int)
答案 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 如果您翻译表格/列字段并使用引文,则可以解决这些问题。但是如果只是在表/列名称中使用英文字母和下划线,你可以省去很多麻烦。
如何为列名使用空格?
我不会那样做。我会使用下划线而不是空格。
希望有所帮助。