【发布时间】:2012-08-15 19:10:30
【问题描述】:
警告:我对数据库排序规则知之甚少,因此如果有任何明显的问题,请提前道歉......
我们有一个包含 url 的数据库列。我们想在这个列上放置一个唯一的约束/索引。
我注意到在默认的数据库排序规则Latin1_General_CI_AS 下,此列中存在欺骗,因为(例如)url http://1.2.3.4:5678/someResource 和http://1.2.3.4:5678/SomeResource 被认为是相等的。通常情况并非如此...此 url 指向的服务器类型 区分大小写。
对于这样的列,最合适的排序规则是什么?显然区分大小写是必须的,但是Latin1_General?网址是Latin1_General 吗?我不关心字典顺序,但唯一索引/分组的相等性很重要。
【问题讨论】:
-
为什么您认为排序规则比其他排序规则更好?还不够用 CS ('CS specifies case-sensitive.')?
-
您是否在插入之前对 URL 进行规范化,例如防止添加
http://host1/SomeResource和http://host1:80/SomeResource?如果没有,您不会通过添加此约束获得太多收益。 -
@Damien_The_Unbeliever,确实如此。网址在插入前已被完全处理。
-
@danihp:我的理解是,在某些排序规则下,字符对被认为是相等的,但在其他排序规则下却不是。如果我是正确的,这将影响我选择排序规则。
-
我明白了,我现在发布答案。
标签: sql-server sql-server-2008-r2 collation