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

时间:2012-08-22 15:56:53

标签: database case-sensitive case-insensitive

我看到一两个线程在全球范围内讨论区分大小写,但我的问题更具体。

我理解对文本值进行不区分大小写搜索的兴趣,例如。

但为什么我们会使用不区分大小写的数据库名称,表和列?

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

3 个答案:

答案 0 :(得分:7)

SQL:2008SQL-99标准定义数据库对标识符不区分大小写,除非它们被引用。我发现大多数ORMs会在它们生成的SQL中引用标识符。

但是,您可能知道并非所有关系数据库都严格遵守标准。 DB2和Oracle 100%兼容。 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确实具有控制这些内容的配置选项,作为标识符will depend on的区分大小写,是数据库实例的默认排序规则。多么令人困惑!

虽然在很大程度上我同意你的意见计算机(编程语言,数据库,文件系统,URL,密码等)应该区分大小写,所有系统都是独立实现的,可以或者可能不遵守可能存在或可能不存在的标准。如果您了解特定数据库系统的细节及其行为,那么实现案例敏感数据库肯定是可能的。

的方式实施 系统 一致的方式让您的生活更轻松。

答案 1 :(得分:1)

使用区分大小写的主要优点是,当我们将它部署在客户端站点上时,无论客户端的SQL Server是否设置为区分大小写,我们的数据库都能正常工作,所以是的,这确实不是一个好主意我不知道为什么有人会使用不区分大小写的数据库表/列。

答案 2 :(得分:0)

如果您今天要重做所有行业,凭借知识和技术,您可能会默认情况下只做一切区分大小写,除了特别要求的不区分大小写的事情。

但是在我出生前几天,甚至当我开始使用计算机工作(好吧,玩)时,许多计算机甚至无法区分大写和小写字母。我制作了一张可能很复杂的卡片,插入我的假苹果II,让它了解它的区别。

所以我想在这些日子里,大小写的区别就像现在有了视网膜显示器。如果你有它很酷。 10年后,我们可能会问为什么有人在没有这些显示的情况下创建了一个应用程序,但今天它并没有那么相关。

数据库(和文件系统)也是如此,因为它们中的许多及其各自的标准至少可以追溯到70年代。