查询数据库中的排序顺序
Posted
技术标签:
【中文标题】查询数据库中的排序顺序【英文标题】:Query on collating sequence in database 【发布时间】:2015-02-25 09:04:53 【问题描述】:按照这个link,我想了解一下
Case-sensitivity in string comparison depends on the collating sequence used
根据检索到的附加信息,使用来自msdn的这些信息,我无法理解以下语句的整理含义:
排序规则指定表示数据集中每个字符的位模式。排序规则还确定排序和比较数据的规则。 SQL Server 支持在单个数据库中存储具有不同排序规则的对象。对于非 Unicode 列,排序规则设置指定数据的代码页以及可以表示的字符。在非 Unicode 列之间移动的数据必须从源代码页转换到目标代码页。
那么,你能通过一个例子帮助我理解数据库中排序序列的含义/意义吗?
注意:我目前正在参加数据库介绍课程。
【问题讨论】:
【参考方案1】:在创建数据库时,您可能会觉得需要以不同的语言存储数据,并且不同的语言会有不同数量的字符和不同的排序顺序,因此您可能需要某种方式对它们进行相应的排序,此时我们使用排序规则。排序规则控制字符串值的排序方式。在 TSQL 中,您可以使用 collate 子句定义它,如下所述http://msdn.microsoft.com/en-us/library/ms184391.aspx
如果您想了解支持的不同配置,您可以查看文档。如果您在创建数据库时未定义任何排序规则,它将从当前 sql server 实例中选择默认排序规则。您还可以在数据库表或列中应用排序规则,并且可以在选择将应用于排序顺序的数据时使用排序规则。
这里有一个相关问题,可以帮助你进一步理解What does 'COLLATE SQL_Latin1_General_CP1_CI_AS' do?
【讨论】:
如果排序规则不同,为什么会影响比较字符串值?我不明白这一点。例如:SELECT * FROM MyTable1 M1 INNER JOIN MyTable2 M2 ON M1.Comments = M2.Comments
这里MyTable1
有Comments VARCHAR(100) COLLATE Latin1_General_CI _AS
列,MyTable2
有Comments VARCHAR(100) COLLATE SQL_Lati n1_General_CP1_CI_AS
列。该查询导致错误,所以我仍然不清楚,为什么当排序规则不同时=
不会发生?请帮帮我!!!
不同的排序规则将以不同的方式存储数据,除非您即时将排序规则转换为相同的排序规则,否则无法进行比较。您可以使用使用不同排序规则的 select 语句,您将看到数据采用不同的格式。详细答案在这里olcot.co.uk/sql-blogs/…以上是关于查询数据库中的排序顺序的主要内容,如果未能解决你的问题,请参考以下文章