postgresql - 为什么 PostgreSQL 将所有内容默认为小写?

标签 postgresql case-sensitive

在使用了相当多的 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 邮件列表上看到的最多的讨论是每个人都同意标准规定的行为被破坏了。以上是我对问题的理解。

关于postgresql - 为什么 PostgreSQL 将所有内容默认为小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409094/

相关文章:

windows - 如何将路径映射到 svn 使用的底层位置的正确大小写

java - 使用默认语言环境的 String.toLowerCase() 的用途?

macos - Git 使文件名首字母大写

java - 需要将小写下划线字符串更改为 camelCase

sql - 在 JOIN 查询中使用限制/偏移量

postgresql - 创建从我计算机上的 CSV 文件复制到位于 Postgres 中另一台计算机上的数据库的查询

database - 在 Delphi 中自动检测 TFDQuery 的必填字段

sql - 除了自加入还有其他选择吗

ruby-on-rails - 销毁一些记录需要非常非常长的时间

python - 在 Python 中检查文件是否存在(并忽略大小写)