在尝试使用
MySQL(5.1)之后,我试图熟悉Postgres(9.2),因为我被
MySQL’s gotchas的一小部分咬了.然而,在我与Postgres的前五分钟里,我遇到了
its gotchas之一,我肯定会打到每个人:
>默认情况下,Postgresql会将未引用的所有内容转换为小写.
这对我来说并不算太大,因为有几个明显的解决方法:
但我想知道为什么.考虑到我想象这个设计决定导致了多少争用,我很惊讶我在互联网上找不到任何理由.有没有人有一个彻底的解释,或者最好是一些开发者宣言的链接,为什么Postgres是这样设计的?我很感兴趣.
解决方法
sql标准指定将不带引号的标识符折叠为大写.许多其他RDBMS都以这种方式遵循标准. Firebird和Oracle都这样做.这意味着默认情况下,标识符匹配不区分大小写.在基本查询中的兼容性时,此行为非常重要.在这方面,MysqL的行为是一个真正的异常值.
然而,Postgresql通过折叠到小写而偏离标准.一般的原因是为什么这被认为更具可读性等等,因为你可以使用case来提示语法.就像是:
SELECT foo FROM bar WHERE baz = 1;
当病例折叠到较低时,这更自然.另一种折叠方式是:
select FOO from BAR where BAZ = 1;
通常像前一种行为(折叠到小写)一样,因为它更好地强调了sql操作,而折叠到另一种情况则不再强调操作并强调标识符.鉴于许多查询的复杂性,我认为前者效果更好.
总的来说,我在postgres邮件列表上看到的大多数讨论都是每个人都同意标准规定的行为被打破.所以以上就是我对这些问题的理解.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。