10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


10.4.1照合順序の実装タイプ

MySQLは複数のタイプの照合順序を実装します。

8ビットの文字セットに対する単純な照合順序

この種の照合順序は,文字コードと重みの対1のマッピングを定義した256個の重みの配列を使用して実装されます。latin1_swedish_ciがその一例です。これは,大文字と小文字を区別しない照合順序なので,大文字と小文字は同じ重みで,等しいものと見なされます。

mysql> SET NAMES 'latin1' COLLATE 'latin1_swedish_ci';SELECT HEX(WEIGHT_STRING('a')), HEX(WEIGHT_STRING('a'))+-------------------------+-------------------------+ | 十六进制(WEIGHT_STRING (' a ')) |十六进制(WEIGHT_STRING(“ ')) | +-------------------------+-------------------------+ | 41 | 41  | +-------------------------+-------------------------+ 1行组(0.01秒)mysql >选择' a ' = ' a ';+-----------+ | ' “=” ' | +-----------+ | 1  | +-----------+ 1行集(0.12秒)

実装の手順については,セクション10.4.3 " 8ビットの文字セットへの単純な照合順序の追加"を参照してください。

8ビット文字セットに対する複雑な照合順序

この種の照合順序は,セクション10.3“文字セットの追加”で説明しているように,文字を順序付けする方法を定義したCソースファイル内の関数を使用して実装されます。

Unicode以外のマルチバイト文字セットの照合順序

この種の照合順序では,8ビット(シングルバイト)文字とマルチバイト文字が異なる方法で処理されます。8ビットの文字の場合,文字コードは大文字と小文字を区別しない形式で重みにマップされます。(たとえば,シングルバイト文字“一个”“一个”はどちらも重みが0 x41です)マルチバイト文字の場合,文字コードと重みの間には,2種類の関係があります。

  • 重みが文字コードと等しい場合。sjis_japanese_ciがこの種の照合順序の一例です。マルチバイト文字“ぢ”の文字コードは0 x82c0であり,重みも0 x82c0です。

    创建表t1 -> (c1 VARCHAR(2) CHARACTER SET sjis)INSERT INTO t1 VALUES ('a'),(' a'),(0x82C0);查询3行影响(0.00秒)记录:3 duplicate: 0 Warnings: 0 mysql> SELECT c1, HEX(c1), HEX(c1)) FROM t1;+------+---------+------------------------+ | c1 |十六进制(c1) |十六进制(WEIGHT_STRING (c1 )) | +------+---------+------------------------+ | 41 | 61 | | | | 41 | 41 | |ぢc0 | 82 | 82 c0  | +------+---------+------------------------+ 3行集(0.00秒)
  • 文字コードが1対1で重みにマップされていても,必ずしもコードと重みが等しくない場合。gbk_chinese_ciがこの種の照合順序の一例です。マルチバイト文字'膰'の文字コードは0 x81b0ですが,重みは0 xc286です。

    创建表t1 -> (c1 VARCHAR(2) CHARACTER SET)INSERT INTO t1 VALUES ('a'),(' a'),(0x81B0);查询3行影响(0.00秒)记录:3 duplicate: 0 Warnings: 0 mysql> SELECT c1, HEX(c1), HEX(c1)) FROM t1;+------+---------+------------------------+ | c1 |十六进制(c1) |十六进制(WEIGHT_STRING (c1 )) | +------+---------+------------------------+ | 41 | 61 | | | | 41 | 41 | |膰b0 | 81 | C286  | +------+---------+------------------------+ 3行集(0.00秒)

実装の手順については,セクション10.3“文字セットの追加”を参照してください。

Unicodeマルチバイト文字セットの照合順序

これらの照合順序の一部はUnicode照合順序アルゴリズム(UCA)に基づきますが,それ以外は基づいていません。

Ucaに基づいていない照合順序では,文字コードと重みは1対1でマップしています。MySQLでは,このような照合順序は大文字と小文字を区別せず,アクセント,濁音,破裂音を区別しません。utf8_general_ciがその一例です。“一个”“一个”“一个”,および“一个”のそれぞれは文字コードは別々ですが,重みはすべて0 x0041であり,等しいものと見なされます。

mysql> SET NAMES 'utf8' COLLATE 'utf8_general_ci';创建表t1 -> (c1 CHAR(1) CHARACTER SET UTF8 COLLATE utf8_general_ci);INSERT INTO t1 VALUES ('a'),(' a'),(' À'),('á');SELECT c1, HEX(c1), HEX(c1)) FROM t1;+------+---------+------------------------+ | c1 |十六进制(c1) |十六进制(WEIGHT_STRING (c1 )) | +------+---------+------------------------+ | | 61 | 0041 | | 0041 | | 41 | |的| C380 | 0041 | |是| C3A1 | 0041年  | +------+---------+------------------------+ 4行集(0.00秒)

MySQLのUCAベースの照合順序には,次の3つのプロパティーがあります。

  • 文字に重みがある場合,それぞれの重みは2バイト(16ビット)を使用します。

  • 文字の重みはゼロ(または空の重み)の場合があります。この場合,文字は無視できます。例:「U+0000 NULL」は重みがなく、無視できます。

  • 1つの文字が1つの重みを持つ場合があります。例:“一个”には0 x0e33の重みがあります。

    mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';SELECT HEX('a'), HEX('a'));+----------+-------------------------+ | 十六进制(a) |十六进制(WEIGHT_STRING (' ')) | +----------+-------------------------+ | 61 | 0 e33  | +----------+-------------------------+ 1行集(0.02秒)
  • 1つの文字が複数の重みを持つ場合があります。これは拡張形式です。例:ドイツ語の文字“ß”(szリガチャーまたはsharp s)には,0 x0fea0feaの重みがあります。

    mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';SELECT HEX('ß'), HEX(WEIGHT_STRING('ß'));+-----------+--------------------------+ | 十六进制(ß)|十六进制(WEIGHT_STRING(ß ')) | +-----------+--------------------------+ | C39F | 0 fea0fea  | +-----------+--------------------------+ 1行集(0.00秒)
  • 複数の文字が1つの重みを持つ場合があります。これは短縮形式です。例:“ch”は,チェコ語の単一の文字であり,0 x0ee2の重みを持ちます。

    mysql> SET NAMES 'utf8' COLLATE 'utf8_czech_ci'SELECT HEX('ch'), HEX('ch'));+-----------+--------------------------+ | 十六进制(ch) |十六进制(WEIGHT_STRING (ch ')) | +-----------+--------------------------+ | 6368 | 0 ee2  | +-----------+--------------------------+ 1行集(0.00秒)

複数の文字と複数の重みのマッピングも可能です(これは拡張形式を使用した短縮形式です)が,MySQLではサポートされていません。

Ucaに基づいていない照合順序に関する実装の手順については,セクション10.3“文字セットの追加”を参照してください。Uca照合順序については,セクション10.4.4 " Unicode文字セットへのUCA照合順序の追加"を参照してください。

その他の照合順序

上記のカテゴリのどれにも該当しない照合順序も少数存在します。