我看到一两个线程在全球范围内谈论区分大小写,但我的问题更具体。
例如,我理解对文本值进行不区分大小写搜索的兴趣。
但是为什么我们要使用不区分大小写的数据库名称、表和列呢?
不会导致错误吗?使用数据库的脚本语言都是区分大小写的,因此例如,如果我们没有为字段使用正确的大小写,它将不会被找到......
我看到一两个线程在全球范围内谈论区分大小写,但我的问题更具体。
例如,我理解对文本值进行不区分大小写搜索的兴趣。
但是为什么我们要使用不区分大小写的数据库名称、表和列呢?
不会导致错误吗?使用数据库的脚本语言都是区分大小写的,因此例如,如果我们没有为字段使用正确的大小写,它将不会被找到......
SQL:2008和SQL-99标准将数据库定义为对标识符不区分大小写,除非它们被引用。我发现大多数ORM都会在它们生成的 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 确实有控制这些东西的配置选项,因为标识符的大小写敏感性将取决于数据库实例的默认排序规则。多么混乱!
虽然在大多数情况下我同意您的观点,即计算机(编程语言、数据库、文件系统、URL、密码等)应该区分大小写,但所有系统都是独立实施的,可能会或可能不会遵守可能或可能不遵守的标准存在。如果您了解特定数据库系统的来龙去脉以及它的行为方式,那么实现区分大小写的数据库绝对是可能的。
以适合您的方式实施系统确实是您的责任,而不是整个技术行业以一致的方式实施一切以使您的生活更轻松。
使用区分大小写的主要优点是,当我们在客户端站点上部署它时,无论客户端的 SQL Server 是否设置区分大小写,我们的数据库都可以工作,所以是的,这确实不是一个好主意,我不知道知道为什么有人会使用不区分大小写的数据库表/列。
如果您今天重做所有 IT 行业,凭借知识和技术,您可能会默认做所有区分大小写的事情,唯一的例外是特别要求不区分大小写的事情。
但是在我出生之前的日子里,甚至当我开始使用计算机工作(好吧,玩)时,许多计算机甚至无法区分大小写字母。我制作了一张可能很复杂的卡来插入我的假苹果 II 以使其了解其中的区别。
所以我想在这些日子里,大小写之间的区别就像现在的视网膜显示器一样。如果你有它很酷。10 年后,我们可能会问,为什么有人在创建应用程序时没有考虑到这种显示,但今天它已经不那么重要了。
数据库(和文件系统)也是如此,因为它们中的许多以及它们各自的标准至少可以追溯到 70 年代。