整理是什么意思?


138

排序规则在SQL中是什么意思,它有什么作用?


2
@gbn:顺便说一下,排序规则在MSSQL和MySQL中的工作方式都非常相似。
Piskvor于


@Piskvor:MSSQL中不提供某些mySql排序规则选项(例如UTF8):msdn.microsoft.com/en-us/library/ms144250.aspx
CB

@CB:不否认这一点;相似性比(不受支持的)字符集还要深。
Piskvor

Answers:


60

排序规则可以简单地认为是排序顺序。

用英语(这是一个很奇怪的堂兄,美国人),排序规则可能很简单,只需按ASCII码排序即可。

一旦您掌握了所有具有其重音和其他功能的奇怪的欧洲语言,排序规则就会发生变化。例如,尽管a在不同的代码点可能存在不同的重音形式,但是可能都需要对它们进行排序,就像它们是同一字母一样。


4
不同的口音通常意味着他们需要,如果他们进行排序不同的字母-例如eëéě,和è 可能是排序的目的,不同的字母(但搜索时可能同一封信中,诅咒那些疯狂的欧洲人;))。
Piskvor于

1
@Piskvor:您的信息中的坐标不是使用带有字母的42字母来指向特定国家/地区的15吗?
Quassnoi

4
@Quassnoi:是的,是吗?我是在暗示我不疯吗?; o)(虽然感谢上帝的Unicode,但如果我仍然必须使用针对特定国家的字符集,我会发疯了)
Piskvor于

3
@Piskvor:对不起,对不起,你完全疯了!:)
Quassnoi

它是仅用于分类还是用于where st= 'aaa'
罗伊·纳米尔

42

除了在某些西欧语言中“重音字母的排序方式与未重音字母的排序方式不同”之外,您还必须考虑字母,有时它们的排序方式也不同。

传统上,在西班牙语中,“ ch”本身就是一个字母,与“ ll”相同(两个字母都代表一个音素),因此列表的排序如下:

  • 卡巴洛
  • 辛科
  • 可可
  • 木炭
  • 巧克力
  • 楚科
  • 墙裙
  • (...)
  • 拉帕拉
  • 卢戈
  • 兰塔
  • 卢维亚
  • 马德拉

通知所有启动单的话Ç一起去,除了开头的词语CH哪去了他们同样与LL -starting话毕竟开始一个字里面去。这是您在旧词典和百科全书中会看到的顺序,有时甚至在今天也很保守。

皇家语言学院对此进行了更改,以使西班牙语在计算世界中更容易适应。尽管如此,ñ仍然被认为是比一个不同的字母ñ,去后,它和之前Ø。因此,这是一个正确排序的列表:

  • 纳米比亚
  • 努美罗
  • andandú
  • ú
  • 奥布拉
  • 大城

通过选择正确的排序规则,您将自动完成所有操作:-)


好的,因此排序规则对于正确排序非常有用,但是对于比较仍然有用吗?例如,出于实际原因,我希望将“ñandú”和“ nandu”等价出现……整理机制是否可以帮助我完成此任务?
CB

@CB:如果您的意思是选择某列值等于'Aéreo'且SQL S的所有行,则返回带有'aereo','aereó','AerEO'之类的行-是的,仅为a设置特定的排序规则查询可以做到这一点。但是,如果此排序规则与数据库的本机排序规则有很大不同,则会遇到性能问题。而且,如果您使用临时表,则还必须跟踪tempdb的排序规则……但是您可以做到这一点。
乔·皮内达

在这种情况下,您能再说明一点吗?尤其是,简单的查询“ SELECT test from test WHERE word LIKE'nandu'”能够做到这一点吗?我应该使用哪种排序规则来使其起作用?(请注意,我关注的是音符号,而不仅是口音...)
CB

2
@CB看一下排序规则的“ AI”或“ AS”部分(不区分重音和区分重音)。
达斯汀·肯德尔2014年

14

告诉如何比较和排序字符串的规则:字母顺序;案件是否重要,变音符号是否重要等

例如,如果您希望所有字母都不同(例如,如果将文件名存储在中UNIX),则使用UTF8_BIN排序规则:

SELECT  'A' COLLATE UTF8_BIN = 'a' COLLATE UTF8_BIN

---
0

如果要忽略大小写和变音符号的区别(例如,对于搜索引擎而言),请使用UTF8_GENERAL_CI归类:

SELECT  'A' COLLATE UTF8_GENERAL_CI = 'ä' COLLATE UTF8_GENERAL_CI

---
1

如您所见,此排序规则(比较规则)将大写字母A和小写ä字母视为同一字母,而忽略大小写和音素符号的区别。


10

排序规则定义了如何对字符串值进行排序和比较

例如,它定义了如何处理

  • 口音(äàa等)
  • 案例(Aa
  • 语言上下文:
    • 在法国整理中, cote < côte < coté < côté.
    • 在默认的SQL Server Latin1中, cote < coté < côte < côté
  • ASCII排序(二进制排序规则)

5

整理是指为字母中的字符分配某种顺序,例如ASCII或Unicode等。

假设您的字母中有3个字符-{A,B,C}。您可以通过为字符分配整数值来为其定义一些示例排序规则

  1. 示例1 = {A = 1,B = 2,C = 3}
  2. 示例2 = {C = 1,B = 2,A = 3}
  3. 示例3 = {B = 1,C = 2,A = 3}

事实上,您可以定义n!大小为n的字母上的排序规则。给定这样的顺序,像LSD / MSD字符串排序之类的不同排序例程会利用它来对字符串进行排序。


3

排序规则确定如何对数据进行排序和比较。关于国际化,这通常很重要,例如,您如何分类日本汉字?

如果您使用Google排序规则和sql server,则会发现大量讨论它的文章!


3

摘自本文: 归类是一组用于比较字符集中的字符的规则。它还规定了字符的排序,并且两个字符的正确顺序因语言而异。排序规则比较了两个字符串,例如,如果一个单词大于另一个单词,则进行相应排序。

如果使用“ latin1”字符集,则可以使用“ latin1_swedish_ci”排序规则。

您必须选择正确的排序规则,因为错误的排序规则可能会影响数据库性能。


2

http://en.wikipedia.org/wiki/整理

整理是将书面信息整理成标准顺序。(...)归类算法(例如Unicode归类算法)通过比较两个给定字符串并确定哪个字符串应排在另一个字符串之前的过程定义顺序。



1
这篇文章真的解释了这一切。
乔·皮内达

3
@乔·派恩达 也许它确实能解释所有内容,但读者是否想知道这一切?或者,读者可能只是想获得一个简洁,可靠的答案,涵盖最基本,最常用的归类元素和功能,以便他/她可以快速阅读它,并继续处理引起问题的任何任务,任务或项目。首先?
cfwschmidt

2
@TJCrowder我对此表示感谢

1

排序规则是SQL Server如何决定如何对文本进行排序和比较的排序规则。

参见MSDN

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.