数据库 - 为什么要不区分大小写?

5

我看到有一两个帖子在全球范围内讨论大小写敏感性,但我的问题更具体。

我理解对于文本值进行大小写不敏感的搜索的兴趣。

但是为什么我们要使用大小写不敏感的数据库名称、表名和列名呢?

这难道不会导致错误吗?使用数据库的脚本语言都是区分大小写的,因此,例如,如果我们没有使用正确的大小写来查询字段,它将无法找到...


往往情况下,用于访问数据库的语言将使用“字符串”,而不是方法或属性这样的语言结构。 - Oded
我个人总是使用关联数组来读取从数据库中获取的行,它们既不是方法也不是属性,而且它们是区分大小写的。 - Pierre de LESPINAY
3个回答

12

SQL:2008SQL-99标准定义了除引号外,数据库对标识符不区分大小写。我发现大多数ORMs在生成的SQL中会给标识符加上引号。

然而,正如您可能知道的,不是所有关系型数据库都严格遵守这些标准。DB2和Oracle完全符合。PostgreSQL基本符合标准,但自动将未加引号的内容转换为小写(个人认为这很好)。

mySQL有点奇怪,因为它将每个表作为文件存储在文件系统中。因此,它受到文件系统大小写敏感性的影响。在Windows上:

CREATE TABLE FOO (a INTEGER);
CREATE TABLE 'Foo' (a INTEGER); -- Errors out, already exists

在 Linux 上:
CREATE TABLE FOO (a INTEGER); -- Creates FOO table
CREATE TABLE 'Foo' (a INTEGER); -- Creates Foo table

SQL Server非常奇怪。在创建时保留大小写,但是之后可以用任何方式引用它(即使你加引号!)。您无法创建区别仅在大小写方面的两个表。注意:SQL Server确实有控制这些内容的配置选项,因为标识符的区分大小写取决于数据库实例的默认排序规则。这太令人困惑了!
虽然我大多数情况下同意您关于计算机(编程语言、数据库、文件系统、URL、密码等)应该区分大小写,但所有系统都是独立实现的,可能遵循也可能不遵循可能存在的标准。如果您知道特定数据库系统的细节和行为方式,则绝对可以实现区分大小写的数据库。
实现一个适合自己的系统绝对是您的责任,而不是整个技术行业实现一切以一致的方式使您的生活更轻松。

谢谢您提供这么详细的答案。我询问的是最佳实践方法。因为我不是唯一负责使用程序/服务的人。这加强了我告诉人们使用区分大小写设置的想法。 - Pierre de LESPINAY
我也不知道postGre的自动小写功能。我也很喜欢这个想法。 - Pierre de LESPINAY
@PierredeLESPINAY - Postgres一直是我首选的数据库。我非常喜欢它。 - Mike Christensen

1
使用大小写敏感的主要优点是,当我们在客户端部署它时,我们的数据库可以正常工作,无论客户的SQL Server是否设置为大小写敏感,因此,确实不是一个好主意,我不知道为什么有人会使用大小写不敏感的数据库表/列。

0

如果你今天重新做整个IT行业,凭借你的知识和技术,你可能会默认将所有东西都区分大小写,唯一的例外是特别要求不区分大小写的事物。

但在我出生之前甚至在我开始使用计算机(好吧,玩)的时代,许多计算机甚至不能区分大小写字母。我制作了一个非常复杂的卡片插入我的仿苹果II电脑中,使它能够理解区分大小写的差异。

所以我想,在那些日子里,拥有类似区分大小写的功能就像现在拥有视网膜显示器一样。如果你有它,那很酷。10年后,我们可能会问为什么有人会创建没有考虑这种显示的应用程序,但今天它并不那么重要。

同样的道理也适用于数据库(和文件系统),因为它们中的许多及其相应的标准至少可以追溯到70年代。


我会说,旧系统(已经基于ASCII表,甚至是7位)应该在不知道x和X或y和Y之间的关系的情况下开始... - Pierre de LESPINAY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接