在不区分大小写的情况下选择区分大小写的排序规则有哪些原因?在进行字符串比较时,我可以看到数据库引擎可能获得适度的性能提升.是吗?如果您的数据设置为全部较低或大写,则区分大小写可能是合理的,但如果您存储混合大小写数据然后尝试查询它则会造成灾难.然后你必须在列上应用lower()函数,以便它匹配相应的小写字符串文字.这可以防止我使用的每个dbms中的索引使用.所以想知道为什么有人会使用这样的选择.
解决方法
有许多带有自然区分大小写的键的数据示例:
>像Unix这样的区分大小写的文件系统中的文件.
> Base-64编码名称(我相信YouTube正在使用的名称,如Artelius的回答).
>大多数编程语言中的符号.
在不区分大小写的系统中存储区分大小写的数据会存在数据不一致甚至丢失重要信息的风险.在最坏情况下,在区分大小写的系统中存储不区分大小写的数据效率会稍低.正如您所指出的,如果您只知道要查找的对象的不区分大小写的名称,则需要调整查询:
SELECT * FROM t WHERE LOWER(name) = 'something';
我注意到在Postgresql中(可能在其他系统中),在表达式LOWER(name)上创建一个索引是一件简单的事情,它将用于此类查询.