我看到有一两个帖子在全球范围内讨论大小写敏感性,但我的问题更具体。
我理解对于文本值进行大小写不敏感的搜索的兴趣。
但是为什么我们要使用大小写不敏感的数据库名称、表名和列名呢?
这难道不会导致错误吗?使用数据库的脚本语言都是区分大小写的,因此,例如,如果我们没有使用正确的大小写来查询字段,它将无法找到...
我看到有一两个帖子在全球范围内讨论大小写敏感性,但我的问题更具体。
我理解对于文本值进行大小写不敏感的搜索的兴趣。
但是为什么我们要使用大小写不敏感的数据库名称、表名和列名呢?
这难道不会导致错误吗?使用数据库的脚本语言都是区分大小写的,因此,例如,如果我们没有使用正确的大小写来查询字段,它将无法找到...
SQL:2008和SQL-99标准定义了除引号外,数据库对标识符不区分大小写。我发现大多数ORMs在生成的SQL中会给标识符加上引号。
然而,正如您可能知道的,不是所有关系型数据库都严格遵守这些标准。DB2和Oracle完全符合。PostgreSQL基本符合标准,但自动将未加引号的内容转换为小写(个人认为这很好)。
mySQL有点奇怪,因为它将每个表作为文件存储在文件系统中。因此,它受到文件系统大小写敏感性的影响。在Windows上:
CREATE TABLE FOO (a INTEGER);
CREATE TABLE 'Foo' (a INTEGER); -- Errors out, already exists
CREATE TABLE FOO (a INTEGER); -- Creates FOO table
CREATE TABLE 'Foo' (a INTEGER); -- Creates Foo table
如果你今天重新做整个IT行业,凭借你的知识和技术,你可能会默认将所有东西都区分大小写,唯一的例外是特别要求不区分大小写的事物。
但在我出生之前甚至在我开始使用计算机(好吧,玩)的时代,许多计算机甚至不能区分大小写字母。我制作了一个非常复杂的卡片插入我的仿苹果II电脑中,使它能够理解区分大小写的差异。
所以我想,在那些日子里,拥有类似区分大小写的功能就像现在拥有视网膜显示器一样。如果你有它,那很酷。10年后,我们可能会问为什么有人会创建没有考虑这种显示的应用程序,但今天它并不那么重要。
同样的道理也适用于数据库(和文件系统),因为它们中的许多及其相应的标准至少可以追溯到70年代。