Sql server URL的排序规则

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指向的服务器类型区分大小写 对于这样一个列,最合适的排序规则是什

警告:我对数据库排序知之甚少,所以如果有任何明显的问题,请提前道歉

我们有一个包含URL的数据库列。我们希望在此列上放置唯一的约束/索引

我注意到,在默认的db排序规则
Latin1\u General\u CI\u AS
下,此列中存在重复项,因为(例如)url
http://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是标识符,我认为它们作为顶级数据类型的地位是当之无愧的。