为什么要使用区分大小写的数据库?

时间:2010-06-07 00:47:17

标签: database collation

在不区分大小写的情况下选择区分大小写的排序规则有哪些原因?在进行字符串比较时,我可以看到数据库引擎可能获得适度的性能提升。是吗?如果您的数据设置为全部为低或大写,则区分大小写可能是合理的,但如果您存储混合大小写数据然后尝试查询它,那将是一场灾难。然后你必须在列上应用lower()函数,以便它匹配相应的小写字符串文字。这可以防止我使用的每个dbms中的索引使用。所以想知道为什么有人会使用这样的选项。

5 个答案:

答案 0 :(得分:9)

有许多数据的示例,其中键自然区分大小写:

  • 像Unix这样的区分大小写的文件系统中的文件。
  • Base-64编码名称(我相信YouTube正在使用的名称,如Artelius的答案)。
  • 大多数编程语言中的符号。

在不区分大小写的系统中存储区分大小写的数据会存在数据不一致甚至丢失重要信息的风险。在最坏情况下,在区分大小写的系统中存储不区分大小写的数据效率稍低。正如您所指出的,如果您只知道要查找的对象的不区分大小写的名称,则需要调整查询:

SELECT * FROM t WHERE LOWER(name) = 'something';

我注意到在PostgreSQL中(可能在其他系统中),在表达式LOWER(name)上创建一个索引是一件简单的事情,它将用于此类查询。

答案 1 :(得分:2)

取决于您要存储的数据。大多数UNIX文件系统都是具有区分大小写键的数据库。 YouTube视频似乎使用区分大小写的密钥进行整理。

大多数情况下,您需要不区分大小写的搜索,但显然存在某些例外情况。

答案 2 :(得分:1)

为您的字段使用不区分大小写的索引。在大多数情况下,您不希望操纵数据以便找到它。

答案 3 :(得分:0)

内容管理的一个原因。通常,您需要识别内容中的更改,以便可以审核,记录和发布这些更改。案例对人类可读内容很重要。 “Dave Doe”是对的。 “dave doe”是完全错误的。

区分大小写对软件开发人员也很重要。如果您不知道所有客户系统所需的区分大小写,那么您可能希望测试案例敏感性作为测试的一部分。

答案 4 :(得分:0)

我参与了一个涉及数据库的应用程序,该数据库具有纯自然键(即“代码”),区分大小写,但不一定如此。

在存储过程中会有大量数据来自数据库(数据库正在进行连接),其中区分大小写不是问题。但是,一些数据需要在单独的查询中来自数据库,然后在循环中“拼接” - 主要是由于SQL无法轻松处理的复杂数据类型 - 这就是问题出现的地方。当我迭代两个结果集并尝试加入“代码”时,值ProductcodeProductCode自然不匹配。

我不得不更改我的代码(C#)以进行不区分大小写的字符串匹配,而不是修复数据。在整个解决方案中,请注意,只需查看这些“代码”进行匹配即可。

如果我有一个区分大小写的数据库,我会有更整洁的代码。

现在,我真的很想知道为什么你需要一个不区分大小写的数据库。是因为懒惰吗?我没有看到数据库不区分大小写的任何正当理由。

相关问题