为什么在DB2中有一个名为ORDER的列?

Mus*_*sis 0 sql database db2

在DB2中,您可以将列命名为ORDER并编写SQL

SELECT ORDER FROM tblWHATEVER ORDER BY ORDER
Run Code Online (Sandbox Code Playgroud)

甚至不需要在列名称周围放置任何特殊字符.这让我痛苦,我不会介入,但我的问题是:为什么数据库允许使用SQL关键字作为对象名称?当然不允许这样更有意义吗?

小智 6

我基本上同意不应该允许关键字作为标识符的观点.大多数现代计算语言都有20个或30个关键字,在这种情况下,暂停使用它们作为标识符是完全合理的.不幸的是,SQL来自旧的COBOL语言学校("计算语言应尽可能与英语相似").因此,SQL(如COBOL)有几百个关键字.

我不记得SQL标准是否说明了保留字是否必须被允许作为标识符,但鉴于广泛(过多!)词汇表,几个SQL实现允许它并不令人惊讶.

话虽如此,使用关键字作为标识符并不像SQL中引用标识符的整体概念那么愚蠢(这些都不是DB2特定的).允许区分大小写的标识符是一回事,但带引号的标识符允许包括空格,变音符号在内的所有类型的无意义,在某些实现中(是的,包括DB2),控制字符!请尝试以下示例:

CREATE TABLE "My
Tablé" ( A INTEGER NOT NULL );

是的,这是标识符中间的换行符,最后是e-acute ......(这导致有趣的猜测是什么编码用于数据库元数据,因此非Unicode数据库是否允许比方说,包含日文列名的表定义).