在DB2中,您可以将列命名为ORDER并编写SQL
SELECT ORDER FROM tblWHATEVER ORDER BY ORDER
甚至不需要在列名称周围放置任何特殊字符.这让我痛苦,我不会介入,但我的问题是:为什么数据库允许使用SQL关键字作为对象名称?当然不允许这样更有意义吗?
我基本上同意不应该允许关键字作为标识符的观点.大多数现代计算语言都有20个或30个关键字,在这种情况下,暂停使用它们作为标识符是完全合理的.不幸的是,SQL来自旧的COBOL语言学校("计算语言应尽可能与英语相似").因此,SQL(如COBOL)有几百个关键字.
我不记得SQL标准是否说明了保留字是否必须被允许作为标识符,但鉴于广泛(过多!)词汇表,几个SQL实现允许它并不令人惊讶.
话虽如此,使用关键字作为标识符并不像SQL中引用标识符的整体概念那么愚蠢(这些都不是DB2特定的).允许区分大小写的标识符是一回事,但带引号的标识符允许包括空格,变音符号在内的所有类型的无意义,在某些实现中(是的,包括DB2),控制字符!请尝试以下示例:
CREATE TABLE "My Tablé" ( A INTEGER NOT NULL );
是的,这是标识符中间的换行符,最后是e-acute ......(这导致有趣的猜测是什么编码用于数据库元数据,因此非Unicode数据库是否允许比方说,包含日文列名的表定义).