Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法创建列名为e.test2的表_Sql_Postgresql - Fatal编程技术网

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

Sql 无法创建列名为e.test2的表,sql,postgresql,Sql,Postgresql,大家好,我需要一些帮助 是否可以创建列名为e.test的表?因为我打错了 错误:在“”处或附近出现语法错误 SQL状态:42601 示例如下 create table test(e.test2 int) 我不建议您在列中命名带句点的列。认真考虑使用下划线代替: create table test(e_test2 int) 在专栏中有特殊的人物只是一种痛苦 如果您想了解为什么这是个坏主意,请使用双引号: create table test("e.test2" int) 无论何时引用该列,都必

大家好,我需要一些帮助

是否可以创建列名为e.test的表?因为我打错了
错误:在“”处或附近出现语法错误
SQL状态:42601
示例如下

create table test(e.test2 int)

我不建议您在列中命名带句点的列。认真考虑使用下划线代替:

create table test(e_test2 int)
在专栏中有特殊的人物只是一种痛苦

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

create table test("e.test2" int)

无论何时引用该列,都必须使用双引号。

我不建议您在列的名称中使用句点。认真考虑使用下划线代替:

create table test(e_test2 int)
在专栏中有特殊的人物只是一种痛苦

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

create table test("e.test2" int)

无论何时引用该专栏,都必须使用双引号。

戈登的答案中有一些补充:

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

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

您可能希望在由多个“层”组成的应用程序中使用DB。在至少一个其他层的表或列名中出现点的几率非常高

即Hibenate使用点作为分隔符。从:

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

如果你想在C、C++或java应用程序中使用数据库,这些语言不允许在类或类成员(字段)名称中使用点(这里也使用点作为分隔符)。 因此,您必须在数据库和应用程序之间来回转换名称

最后也是最重要的一点:连接。假设下面示例中的一列包含一个点(即fir.stname)。我从来没有试过,但我敢打赌你的DB会被它噎住。除此之外,这是令人困惑的

SELECT person.firstname, person.lastname, address.city
FROM from person
INNER JOIN address
ON person.id = address.person;
TL;DR如果您前后转换表/列字段并使用引号,则可以解决这些问题。但是,如果只在表/列名中使用英文字母字符和下划线,就可以避免许多陷阱和麻烦


使用空格作为列名怎么样

我也不会那样做。我会用下划线代替空格


希望这能有所帮助。

戈登的答案中有一些补充:

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

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

您可能希望在由多个“层”组成的应用程序中使用DB。在至少一个其他层的表或列名中出现点的几率非常高

即Hibenate使用点作为分隔符。从:

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

如果你想在C、C++或java应用程序中使用数据库,这些语言不允许在类或类成员(字段)名称中使用点(这里也使用点作为分隔符)。 因此,您必须在数据库和应用程序之间来回转换名称

最后也是最重要的一点:连接。假设下面示例中的一列包含一个点(即fir.stname)。我从来没有试过,但我敢打赌你的DB会被它噎住。除此之外,这是令人困惑的

SELECT person.firstname, person.lastname, address.city
FROM from person
INNER JOIN address
ON person.id = address.person;
TL;DR如果您前后转换表/列字段并使用引号,则可以解决这些问题。但是,如果只在表/列名中使用英文字母字符和下划线,就可以避免许多陷阱和麻烦


使用空格作为列名怎么样

我也不会那样做。我会用下划线代替空格


希望对您有所帮助。

是的,因为“.”是一个特殊字符。点保留为一个字符,用于将数据库、表和列名分开。如果您确实有一个数据库或表名为“代码> E < /代码>,那么请随意使用这个名称,否则删除它。如果您想以更复杂的方式组织您的表,那么只需列一个简单的列表,然后考虑使用列名称的空间如何?使用<代码> @ /代码>将您的评论发送给特定的人(例如AIMAN)。有什么原因不想为列名使用普通标识符吗?然而,类似于
创建表“Είίίίίίίίίίίίίίίπέροεοτραπέίζιμοίίί将起作用。请参阅下面的答案。是,因为“.”是一个特殊字符。点保留为用于将数据库、表和列名分开的字符。如果您确实有一个数据库或表名为“代码> E < /代码>,那么请随意使用这个名称,否则删除它。如果您想以更复杂的方式组织您的表,那么只需列一个简单的列表,然后考虑使用列名称的空间如何?使用<代码> @ /代码>将您的评论发送给特定的人(例如AIMAN)。有什么原因不想为列名使用普通标识符吗?然而,类似于
创建表“Είίίίίίίίίίίίίίίπέροεοτραπέίζιμοίίί将起作用。见下面的答案。