Sql server URL的排序规则
警告:我对数据库排序知之甚少,所以如果有任何明显的问题,请提前道歉 我们有一个包含URL的数据库列。我们希望在此列上放置唯一的约束/索引 我注意到,在默认的db排序规则Sql server URL的排序规则,sql-server,sql-server-2008-r2,collation,Sql Server,Sql Server 2008 R2,Collation,警告:我对数据库排序知之甚少,所以如果有任何明显的问题,请提前道歉 我们有一个包含URL的数据库列。我们希望在此列上放置唯一的约束/索引 我注意到,在默认的db排序规则Latin1\u General\u CI\u AS下,此列中存在重复项,因为(例如)urlhttp://1.2.3.4:5678/someResource和http://1.2.3.4:5678/SomeResource被认为是平等的。通常情况并非如此。。。此url指向的服务器类型区分大小写 对于这样一个列,最合适的排序规则是什
Latin1\u General\u CI\u AS
下,此列中存在重复项,因为(例如)urlhttp://1.2.3.4:5678/someResource
和http://1.2.3.4:5678/SomeResource
被认为是平等的。通常情况并非如此。。。此url指向的服务器类型区分大小写
对于这样一个列,最合适的排序规则是什么?很明显,区分大小写是必须的,但是
Latin1\u General
?URL是否为拉丁语?我不担心字典顺序,但唯一索引/分组的相等性很重要。排序规则中的字母CI
表示不区分大小写
对于URL,它将是拉丁字符和符号的一小部分,然后尝试
Latin1\u General\u CS\u AI
排序规则中的字母CI
表示不区分大小写
对于URL,它将是拉丁字符和符号的一小部分,然后尝试Latin1\u General\u CS\u AI
您可以为此列设置CS(区分大小写)排序规则:
ALTER TABLE dbo.MyTable
ALTER COLUMN URLColumn varchar(max) COLLATE Latin1_General_CS_AS
您还可以在SQL语句中指定排序规则:
SELECT * FROM dbo.MyTable
WHERE UrlColumn like '%AbC%' COLLATE Latin1_General_CS_AS
以下是一个供参考的列表。您可以为该列设置CS(区分大小写)排序规则:
ALTER TABLE dbo.MyTable
ALTER COLUMN URLColumn varchar(max) COLLATE Latin1_General_CS_AS
您还可以在SQL语句中指定排序规则:
SELECT * FROM dbo.MyTable
WHERE UrlColumn like '%AbC%' COLLATE Latin1_General_CS_AS
这里有一个供参考。Latin1\u General使用代码页1252(),该代码页()中包含URL允许的字符,因此可以说URL是Latin1\u General
您只需选择区分大小写的选项
Latin1\u General\u CS\u AS
Latin1\u General使用代码页1252(),该代码页()中包含URL允许的字符,因此可以说URL是Latin1\u General
您只需选择区分大小写的选项Latin1\u General\u CS\u,因为显示:
ABNF符号将其终端值定义为非负
基于US-ASCII编码字符集的整数(代码点)
[ASCII]
维基百科说允许的字符有:
Unreserved
May be encoded but it is not necessary
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~
Reserved
Have to be encoded sometimes
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
在比较操作中,它们似乎不是此字符之间的冲突。此外,您还可以使用函数进行此比较
但这种操作并不是主要问题。主要问题是http://domain:80
和http://domain
可能是相同的。同样对于编码字符,url可能与编码字符不同
在我看来,RDBMS将把这种结构合并为新的数据类型:url、电话号码、电子邮件地址、mac地址、密码、纬度、经度等等。我认为排序可以帮助解决这个问题,但不会 说:
ABNF符号将其终端值定义为非负
基于US-ASCII编码字符集的整数(代码点)
[ASCII]
维基百科说允许的字符有:
Unreserved
May be encoded but it is not necessary
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~
Reserved
Have to be encoded sometimes
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
在比较操作中,它们似乎不是此字符之间的冲突。此外,您还可以使用函数进行此比较
但这种操作并不是主要问题。主要问题是http://domain:80
和http://domain
可能是相同的。同样对于编码字符,url可能与编码字符不同
在我看来,RDBMS将把这种结构合并为新的数据类型:url、电话号码、电子邮件地址、mac地址、密码、纬度、经度等等。我认为排序可以帮助解决这个问题,但不会 你为什么认为校勘比其他的好?不足以使用CS()?您是否在插入前规范化URL,例如防止http://host1/SomeResource
和http://host1:80/SomeResource
是否被添加?如果不是的话,你将不会通过增加这个约束获得太多的好处。@Damien_不信者,是的。URL在插入之前已被完全处理。@danihp:我的理解是,在某些排序规则下,字符对被认为是相等的,而在其他排序规则下则不相等。如果我是正确的,这将影响我对排序的选择。我明白,我现在发布了一个答案。为什么你认为排序比其他排序更好?不足以使用CS()?您是否在插入前规范化URL,例如防止http://host1/SomeResource
和http://host1:80/SomeResource
是否被添加?如果不是的话,你将不会通过增加这个约束获得太多的好处。@Damien_不信者,是的。URL在插入之前已被完全处理。@danihp:我的理解是,在某些排序规则下,字符对被认为是相等的,而在其他排序规则下则不相等。如果我是正确的,这将影响我对排序的选择。我明白,我现在发布了一个答案。事实上。。。鉴于URI是标识符,我认为它们作为顶级数据类型的地位是当之无愧的。。。鉴于URI是标识符,我认为它们作为顶级数据类型的地位是当之无愧的。