照合とはどういう意味ですか?


138

SQLでの照合とはどういう意味ですか?


2
@gbn:ちなみに、照合はMSSQLとMySQLの両方で非常に似た方法で機能します。
Piskvorが


@Piskvor:一部のmySql照合オプション(UTF8など)がMSSQLで使用できない場合:msdn.microsoft.com/en-us/library/ms144250.aspx
CB

@CB:それを否定するものではありません。類似性は、サポートされていない(サポートされていない)文字セットよりも深くなります。
Piskvorは2013

回答:


60

照合順序は、単にソート順と考えることができます。

英語(そして奇妙ないとこ、アメリカ人)では、照合はASCIIコードによる順序付けからなる非常に単純な問題である可能性があります。

アクセントやその他の機能を備えた奇妙なヨーロッパ言語に入ると、照合順序が変わります。たとえば、の異なるアクセント付き形式がa異なるコードポイントに存在する可能性がありますが、それらはすべて同じ文字であるかのように並べ替える必要がある場合があります。


4
異なるアクセントは通常、彼らは彼らがいたかのようにソートする必要があることを意味する別の手紙-例えばeëéě、およびè かもしれない発注の目的のために個別の文字も(しかし、おそらく同じ文字を検索する場合、それらの狂気ヨーロッパ畜生;))。
Piskvorが

1
@Piskvor:42文字のアルファベットを使用して特定の国を指している情報の座標は15区別されませんか?
Quassnoi、2010

4
@Quassnoi:そうですね、そして?私が狂っていない場所を暗示するのでしょうか?; o)(Unicodeについては神に感謝しますが、国固有の文字セットを使用する必要がある場合は、私は怒って
激怒するでしょう

3
@Piskvor:すみません、すみません、あなたは完全に狂っています!:)
Quassnoi

並べ替え専用where st= 'aaa'ですか、それともですか?
Royi Namir

42

一部の西ヨーロッパ言語では、「アクセント記号付きの文字はアクセント記号なしの文字とは異なる方法でソートされます」の他に、時々異なる方法でソートされる文字のグループも考慮する必要があります。

伝統的に、スペイン語では、「ch」はそれ自体が「ll」(どちらも単一の音素を表す)と同じ文字と見なされていたため、リストは次のようにソートされます。

  • カバロ
  • シンコ
  • コシェ
  • チャルコ
  • チョコレート
  • チュエコ
  • ダドー
  • (...)
  • ランパラ
  • ルエゴ
  • ランタ
  • ルビア
  • マデラ

通知は単一で始まるすべての単語cが始まる言葉を除いて、一緒に行くCH行くと同じそれら、LL単一で始まるすべての単語の後に行く-出発言葉リットル。これは、古い辞書や百科事典に見られる順序であり、非常に保守的な組織によっては今日でも見られることがあります。

ロイヤルアカデミーオブザランゲージはこれを変更し、スペイン語をコンピューティングの世界で受け入れやすくしました。それでも、ñnとは別の文字と見なされ、その後oの前に移動します。これは正しい順序のリストです:

  • ナミビア
  • ヌメロ
  • ñandú
  • ñú
  • オブラ
  • お城

正しい照合を選択することで、これらすべてが自動的に行われます:-)


照合は、正しい並べ替えには非常に役立ちますが、比較には役立ちますか?たとえば、実用的な理由から、「ñandú」と「nandu」を同等にしたいのですが...照合メカニズムがこのタスクに役立ちますか?
CB

@CB:列の値が「Aéreo」に等しいすべての行を選択するようなものを意味し、SQL Sが「aereo」、「aereó」、「AerEO」などの行を返す場合-はい、特定の照合順序をクエリはそれを行うことができます。ただし、この照合がデータベースのネイティブ照合と大きく異なる場合は、パフォーマンスの問題が発生します。また、一時テーブルを使用する場合は、tempdbの照合も追跡する必要があります...しかし、それは可能です。
ジョーピネダ2013年

その場合、もう少し説明してもらえますか?特に、「SELECT word FROM test WHERE word LIKE 'nandu'」という単純なクエリでそれができるのでしょうか。それを機能させるには、どの照合順序を使用すればよいですか?(私はアクセント記号だけでなく分音記号についても心配しています...)
CB

2
@CBは、照合の「AI」または「AS」の部分(アクセントを区別しない、アクセントを区別する)を確認します。
ダスティンケンドール

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

照合順序は、文字列値を並べ替えて比較する方法を定義します

たとえば、それは対処する方法を定義します

  • アクセント(äàaetc)
  • ケース(Aa
  • 言語コンテキスト:
    • フランスの照合では、 cote < côte < coté < côté.
    • SQL Server Latin1のデフォルトでは、 cote < coté < côte < côté
  • ASCIIソート(バイナリ照合)

5

照合とは、ASCIIやUnicodeなど、アルファベットの文字に何らかの順序を割り当てることを意味します。

アルファベットに{A、B、C}の3文字があるとします。文字に整数値を割り当てることで、いくつかの例の照合を定義できます

  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

照合順序は、データを並べ替えて比較する方法を決定します。それは国際化に関して非常にしばしば重要です、例えばどのように日本の漢字を分類するのですか?

グーグル照合とSQLサーバーの場合、それについて説明する記事がたくさんあります。


3

この記事からの引用: 照合は、文字セット内の文字を比較するための一連のルールです。また、文字の並べ替えも規定されており、2文字の適切な順序は言語によって異なります。照合は、単語が別の単語よりも大きい場合など、2つの文字列を比較し、それに応じて並べ替えます。

「latin1」文字セットを使用している場合は、「latin1_swedish_ci」照合順序を使用できます。

間違った照合はデータベースのパフォーマンスに影響を与える可能性があるため、正しい照合を選択する必要があります。


2

http://en.wikipedia.org/wiki/Collat​​ion

照合は、書かれた情報を標準的な順序に組み立てることです。(...)Unicode照合アルゴリズムなどの照合アルゴリズムは、指定された2つの文字列を比較し、どちらを優先するかを決定するプロセスの順序を定義します。



1
この記事では、それをすべて説明しています。
ジョー・ピネダ

3
@ジョー・ピネダ。多分それは本当にそれをすべて説明しますが、読者はそれをすべて知りたいですか?または、読者が照合の最も基本的で一般的に使用される要素と機能をカバーする簡潔で信頼できる回答を単に望んでいる可能性があるので、読者はそれをすばやく読んで、問題、で始まる?
cfwschmidt 2015

2
@TJCrowderこれの皮肉に感謝します

1

照合は、SQLサーバーがテキストの並べ替えと比較の方法を決定する方法です。

MSDNを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.