| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL バージョン 4.1 の追加機能の 1 つとして、キャラクタセットの処理が改善されたことがあげられます。この章では、以下について説明します。
ここでは、MySQL 4.1.1 での実装に基づき機能を説明します (MySQL 4.1.0 には、これらの機能の全部ではなく一部のみが存在します。また、実装が異なっている機能もあります)。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
キャラクタセットとは、シンボルとエンコードのセットです。照合順序とは、キャラクタセット内の文字を比較するためのルールを集めたものです。架空のキャラクタセットを例にして、キャラクタセットと照合順序の違いを見てみましょう。
次の 4 文字で構成されるアルファベットがあるとします : `A'、`B'、`a'、`b'次のように、各文字に対して番号を指定します : `A' = 0、`B' = 1、`a' = 2、`c' = 3文字 `A' はシンボルであり、数字 0 は `A' をエンコードしたものです。4 文字のすべてとそれぞれのエンコードを組み合わせたものをキャラクタセットと呼びます。
次に、文字列値 `A' と `B' を比較してみましょう。 最も簡単に比較するには、エンコードを確認します。`A' は 0、`B' は 1 です。0 は 1 よりも小さいので、`A' は `B' よりも小さいと表現することができます。今ここで行ったのは、キャラクタセットに対する照合順序の適用です。照合順序はルールの集まりであり、上記の場合にルールは "エンコードの比較" のみとなります。これは可能な照合順序のうちで最も単純なものであり、バイナリ照合順序と呼ばれています。
しかし、小文字と大文字を等しいと表現したい場合にはどうなるのでしょうか。その場合、少なくとも次の 2 つのルールが必要です。(1) 小文字の `a' および `b' が大文字の `A' および `B' と同じであると見なす。(2) その後にエンコードを比較する。これは大文字と小文字を区別しない照合順序と呼ばれ、バイナリ照合順序よりも少し複雑です。
実際は、大半のキャラクタセットに多数の文字が含まれています。`A' と `B' だけではなく、アルファベットの全体から構成されています。ときには複数のアルファベットや、数千文字からなる東洋の書記体系に、多くの特殊記号や終止符が付属することもあります。また、実際には大半の照合順序に多くのルールがあります。大文字と小文字が区別されないだけではありません。アクセントが区別されない("アクセント" は、ドイツ語での `@"O' のように文字に追加されるマーク)、あるいは複数文字マッピング(ドイツ語照合順序のどちらかにおける `@"O' = `OE' のルールなど)などのルールがあります。
MySQL 4.1 では以下が可能です。
MySQL 4.1 はこれらの点において、MySQL 4.0 よりもはるかに柔軟性があるばかりでなく、他の DBMS に大きく差をつけています。ただし、新機能を効率的に使用するには、利用可能なキャラクタセット、各デフォルトの変更方法、各種の列演算子による処理内容を知っておかなければなりません。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
キャラクタセットには、少なくとも 1 つの照合順序が含まれており、複数の照合順序が含まれていることもあります。
たとえば、キャラクタセット latin1("ISO-8859-1 西ヨーロッパ言語")には以下の照合順序が含まれています。
| 照合順序 | 意味 |
latin1_bin | latin1 エンコードに基づくバイナリ |
latin1_danish_ci | デンマーク語/ノルウェー語 |
latin1_german1_ci | ドイツ語 DIN-1 |
latin1_german2_ci | ドイツ語 DIN-2 |
latin1_swedish_ci | スウェーデン語/フィンランド語 |
latin1_general_ci | マルチリンガル |
注意:
latin1 のデフォルト照合順序は latin1_swedish_ci です。
照合順序名には次の規則が適用されます。関連するキャラクタセットの名前で始まる。通常は言語名が含まれており、_ci(大文字と小文字が区別されない)、_cs(大文字と小文字が区別される)、_bin(バイナリ)のいずれかで終わる。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
サーバ、データベース、テーブル、接続の 4 段階で、キャラクタセットと照合順序のデフォルト設定が用意されています。以下の説明は複雑に見えるかもしれませんが、マルチレベルのデフォルト設定では自然かつ明確な結果を得られることが実際に判明しています。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL Server にはサーバキャラクタセットとサーバ照合順序があり、いずれもヌルにすることはできません。
MySQL では、サーバキャラクタセットとサーバ照合順序が次のように決定されます。
このレベルでは、決定は簡単です。サーバのキャラクタセットと照合順序は、mysqld の起動時に使用するオプションに依存します。--default-character-set=character_set_name をキャラクタセットに対して使用でき、--default-collation=collation_name を照合順序に対して追加することもできます。文字コードを指定しないのは、--default-character-set=latin1 を指定した場合と同じです。キャラクタセット(たとえば latin1)のみを指定して照合順序を指定しないのは、--default-charset=latin1 --collation=latin1_swedish_ci を指定した場合と同じです。これは latin1 のデフォルト照合順序が latin1_swedish_ci であるためです。
したがって、以下の 3 つのコマンドを実行すると、いずれも同じ結果になります。
shell> mysqld
shell> mysqld --default-character-set=latin1
shell> mysqld --default-character-set=latin1
--default-collation=latin1_swedish_ci
|
設定を変更する手段の 1 つは再コンパイルです。ソースからのビルド時にデフォルトのサーバキャラクタセットと照合順序を変更するには、--with-character-set と --with-collation を configure の引数として使用してください。例:
shell> ./configure --with-character-set=latin1 |
または
shell> ./configure --with-character-set=latin1
--with-collation=latin1_german1_ci
|
mysqld と configure では、キャラクタセットと照合順序の有効性がチェックされます。組み合わせが有効でない場合、各プログラムによってエラーメッセージが表示され、強制終了されます。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
各データベースにはデータベースキャラクタセットとデータベース照合順序があり、いずれもヌルにすることはできません。CREATE DATABASE および ALTER DATABASE コマンドには現在、データベースのキャラクタセットと照合順序を指定するためのオプション節があります。
CREATE DATABASE db_name
[DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]]
ALTER DATABASE db_name
[DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]]
|
例:
CREATE DATABASE db_name DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; |
MySQL では、データベースキャラクタセットとデータベース照合順序が次のように選択されます。
CHARACTER SET X と COLLATE Y の両方を指定した場合は、キャラクタセット X と照合順序 Y。
CHARACTER SET X を指定し、COLLATE を指定しなかった場合は、キャラクタセット X とそのデフォルト照合順序。
MySQL の CREATE DATABASE ... DEFAULT CHARACTER SET ... 構文は標準 SQL CREATE SCHEMA ... CHARACTER SET ... 構文に類似しています。このため、キャラクタセットと照合順序が異なる複数のデータベースを同一の MySQL サーバ上に作成することができます。
テーブルのキャラクタセットと照合順序が CREATE TABLE ステートメントに指定されていない場合、データベースのキャラクタセットと照合順序はデフォルト値として使用されます。これらに他の用途はありません。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
各テーブルにはテーブルキャラクタセットとテーブル照合順序があり、いずれもヌルにすることはできません。CREATE TABLE および ALTER TABLE ステートメントには現在、テーブルのキャラクタセットと照合順序を指定するためのオプション節があります。
CREATE TABLE table_name ( column_list ) [DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]] ALTER TABLE table_name [DEFAULT CHARACTER SET character_set_name] [COLLATE collation_name] |
例:
CREATE TABLE t1 ( ... ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci; |
MySQL では、テーブルキャラクタセットとテーブル照合順序が次のように選択されます。
CHARACTER SET X と COLLATE Y の両方を指定した場合は、キャラクタセット X と照合順序 Y。
CHARACTER SET X を指定し、COLLATE を指定しなかった場合は、キャラクタセット X とそのデフォルト照合順序。
カラムのキャラクタセットと照合順序が個別のカラム定義に指定されていない場合、テーブルのキャラクタセットと照合順序はデフォルト値として使用されます。テーブルのキャラクタセットと照合順序は MySQL 拡張であり、同等の機能は標準 SQL に存在しません。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
各 "文字" カラム(CHAR、VARCHAR または TEXT型)にはカラムキャラクタセットとカラム照合順序があり、いずれもヌルにすることはできません。カラム定義構文には現在、カラムキャラクタセットとカラム照合順序を指定するためのオプション節があります。
column_name {CHAR | VARCHAR | TEXT} (column_length)
[CHARACTER SET character_set_name [COLLATE collation_name]]
|
例:
CREATE TABLE Table1 ( column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci ); |
MySQL では、カラムキャラクタセットとカラム照合順序が次のように選択されます。
CHARACTER SET X と COLLATE Y の両方を指定した場合は、キャラクタセット X と照合順序 Y。
CHARACTER SET X を指定し、COLLATE を指定しなかった場合は、キャラクタセット X とそのデフォルト照合順序。
CHARACTER SET および COLLATE 節は標準 SQL です。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL でデフォルトのキャラクタセットと照合順序の値がどのように決定されるかを、以下の例で示します。
CREATE TABLE t1 ( c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci ) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin; |
ここでは、latin1 キャラクタセットと latin1_german1_ci 照合順序がカラムに指定されています。定義は明示的なので、直接的と言えます。なお、latin1 カラムの保存先が latin2 テーブルになっていることに問題はありません。
CREATE TABLE t1 ( c1 CHAR(10) CHARACTER SET latin1 ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci; |
ここでは、latin1 キャラクタセットとデフォルト照合順序がカラムに指定されています。自然な指定に見えますが、デフォルト照合順序はテーブルレベルから取り込まれません。latin1 のデフォルト照合順序は常に latin1_swedish_ci です。したがって、カラム c1 には latin1_danish_ci の照合順序ではなく latin1_swedish_ci の照合順序が設定されます。
CREATE TABLE t1 ( c1 CHAR(10) ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci; |
ここでは、デフォルトキャラクタセットとデフォルト照合順序がカラムに指定されています。この場合に MySQL では、テーブルレベルまで検索してカラムのキャラクタセットと照合順序が決定されます。したがって、カラム c1 のキャラクタセットは latin1、照合順序は latin1_danish_ci となります。
CREATE DATABASE d1 DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci; USE d1; CREATE TABLE t1 ( c1 CHAR(10) ); |
キャラクタセットと照合順序を指定せずにカラムを作成します。テーブルレベルのキャラクタセットと照合順序も指定しません。この場合に MySQL では、データベースレベルまでさかのぼって処理が決定されます。(データベースの設定はテーブルの設定になり、そしてカラムの設定になります。)したがって、カラム c1 のキャラクタセットは latin2、照合順序は latin2_czech_ci となります。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
各接続には接続キャラクタセットと接続照合順序があり、いずれもヌルにすることはできません。実際には 2 つの接続キャラクタセットが存在するため、両者の区別が必要な場合は "接続/リテラル" および "接続/結果" の呼称を使い分けています。
"接続" とは、サーバへの接続時に作成されるものです。クライアントは接続を介し、SQL ステートメント(クエリなど)をサーバに送信します。サーバでは接続を介し、応答(結果セットなど)をクライアントに返します。これによって、次のような疑問が生じます。(a) クライアントから送信される際にどのキャラクタセットでクエリが送られるのか。(b) サーバではクエリを受信した後にどのキャラクタセットに変換するのか。(c) サーバでは結果セットまたはエラーメッセージをクライアントに返送する前にどのキャラクタセットに変換するのか。これらは細かく調整することができますが、デフォルトを適用することもできます。デフォルトを適用する場合、このセクションをとばしてかまいません。
接続キャラクタセットに影響するステートメントが 2 つ存在します。
SET NAMES character_set_name SET CHARACTER SET character_set_name |
SET NAMES は、クライアントから送信される SQL ステートメントのキャラクタセットを示します。たとえば、SET NAMES cp1251 は 「このクライアントからの入力メッセージは今後、キャラクタセット cp1251 になります」 とサーバに通知します。サーバでは適宜、独自のキャラクタセットへと自由に変換することができます。
SET CHARACTER SET は、クライアントから送信される SQL ステートメントのキャラクタセットと、サーバからクライアントに返される結果セットのキャラクタセットを示します。そのため SET CHARACTER SET は、SET NAMES を含んでいるほか、たとえば SELECT ステートメントを使用する際にどのキャラクタセットでカラムに値が保持されるかを示します。
例:column1 が CHAR(5) CHARACTER SET latin2 として定義されているとします。SET CHARACTER SET が指定されていない場合、SELECT column1 FROM t に対しサーバは、キャラクタセット latin2 を使用して column1 の値をすべて返します。一方、SET CHARACTER SET latin1 が指定されている場合、サーバは送信前に latin2 の値を latin1 に変換します。そのような変換は低速であり、損失につながることもあります。
SET NAMES または SET CHARACTER SET の実行時には、"接続照合順序" も変更していることになります。ただし、接続照合順序は整合性の維持のみを目的として存在しています。通常、その値は重要ではありません。
mysql クライアントでは、起動するたびに SET NAMES を実行する必要はありません。--default-character-set-name オプション設定を mysql のコマンドラインか、オプションファイルに追加することができます。
たとえば、以下のオプション設定ファイルの設定では、mysql を実行するたびに接続キャラクタセットが指定されます。
[mysql] default-character-set-name=character_set_name |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
各文字列リテラルにはキャラクタセットと照合順序があり、いずれもヌルにすることはできません。
文字列リテラルでは、オプションとしてキャラクタセットイントロデューサと COLLATE 節を指定することができます。
[_character_set_name]'string' [COLLATE collation_name] |
例:
SELECT 'string'; SELECT _latin1'string'; SELECT _latin1'string' COLLATE latin1_danish_ci; |
単純なステートメント SELECT 'string' では、接続/リテラルキャラクタセットが使用されます。
_character_set_name は以前、イントロデューサと呼ばれていました。指定すると、"キャラクタセット X の文字列が後続する" ことがパーサに通知されます。
上記はユーザの混乱を招いていたため、ここで強調しておきますが、イントロデューサは変換の原因にはならず、文字列の値が変更されないことを示すにすぎません。標準的な 16 進リテラルおよび数値 16 進リテラルの表記(x'literal' および 0xnnnn)の前と ?(用意されたステートメントをプログラミング言語インタフェースで使用する際のパラメータ代替)の前でも、イントロデューサは有効です。
例:
SELECT _latin1 x'AABBCC'; SELECT _latin1 0xAABBCC; SELECT _latin1 ?; |
MySQL では、リテラルのキャラクタセットおよび照合順序が次のように決定されます。
_X と COLLATE Y の両方が指定された場合、リテラルキャラクタセットは X、リテラル照合順序は Y。
_X は指定されており、COLLATE が指定されていない場合、リテラルキャラクタセットは X、リテラル照合順序は Xのデフォルト照合順序。
例:
latin1 キャラクタセットと latin1_german1_ci 照合順序が指定されている場合
SELECT _latin1'M@"uller' COLLATE latin1_german1_ci; |
latin1 キャラクタセットとそのデフォルト照合順序(latin1_swedish_ci)が指定されている場合
SELECT _latin1'M@"uller'; |
SELECT 'M@"uller'; |
キャラクタセットイントロデューサと COLLATE 節は、標準 SQL の指定に基づき実装されます。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
COLLATE 節
COLLATE 節では、比較に対するデフォルト照合順序が何であれ、無効にすることができます。SQL クエリのさまざまな個所で COLLATE を使用することができます。以下に例を示します。
ORDER BY を指定した場合
SELECT k FROM t1 ORDER BY k COLLATE latin1_german2_ci; |
AS を指定した場合
SELECT k COLLATE latin1_german2_ci AS k1 FROM t1 ORDER BY k1; |
GROUP BY を指定した場合
SELECT k FROM t1 GROUP BY k COLLATE latin1_german2_ci; |
SELECT MAX(k COLLATE latin1_german2_ci) FROM t1; |
DISTINCT を指定した場合
SELECT DISTINCT k COLLATE latin1_german2_ci FROM t1; |
WHERE を指定した場合
SELECT * FROM t1 WHERE _latin1 'M@"uller' COLLATE latin1_german2_ci = k; |
HAVING を指定した場合
SELECT k FROM t1 GROUP BY k HAVING k = _latin1 'M@"uller' COLLATE latin1_german2_ci; |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
COLLATE 節の優先順位
COLLATE 節は優先順位が高い(|| よりも上)ので、式
x || y COLLATE z |
は以下と同じ意味になります。
x || (y COLLATE z) |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
BINARY 演算子
BINARY 演算子は、COLLATE 節の省略形です。たとえば、BINARY 'x' は 'x' COLLATE y と同じであり、この場合に y は該当するバイナリ照合順序の名称を表します。たとえば、カラム a のキャラクタセットが latin1 であると仮定すると、以下のクエリはどちらも同じ結果をもたらします。
SELECT * FROM t1 ORDER BY BINARY a; SELECT * FROM t1 ORDER BY a COLLATE latin1_bin; |
注意:どのキャラクタセットにもバイナリ照合順序があります。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
大多数のクエリでは、MySQL がどの照合順序により比較演算を行うかは明確になっています。たとえば以下の場合、照合順序が "カラム x のカラム照合順序" になることは明らかです。
SELECT x FROM T ORDER BY x; SELECT x FROM T WHERE x = x; SELECT DISTINCT x FROM T; |
ただし、複数のオペランドが使用されていると、あいまいになることがあります。たとえば、以下のような場合です。
SELECT x FROM T WHERE x = 'Y'; |
x の照合順序と文字列リテラル 'Y' の照合順序のどちらがこのクエリで使用されるのでしょうか。
標準 SQL では、"強制可能" ルールと呼ばれていた方法で上記の問題を解決しました。これについては、以下の発想が基本となっています: x と 'Y' の両方に照合順序があるので、どちらの照合順序を優先するかを判断しなければならない。複雑な問題だが、これらのルールでほとんどの状況に対応できる。
COLLATE 節は優先順位が 4。
これらのルールによって、あいまいさは次のように解消されます。
例:
column1 = 'A' | column1 の照合順序を使用する。 |
column1 = 'A' COLLATE x | 'A' の照合順序を使用する。 |
column1 COLLATE x = 'A' COLLATE y | エラー |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
各キャラクタセットには 1 つ以上の照合順序があり、各照合順序は 1 つのキャラクタセットに関連付けられていることを思い出してください。したがって、次のステートメントはエラーになります。latin2_bin 照合順序は latin1 キャラクタセットに対して有効でないからです。
mysql> SELECT _latin1 'x' COLLATE latin2_bin; ERROR 1251: COLLATION 'latin2_bin' is not valid for CHARACTER SET 'latin1' |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
テーブル T のカラム X に以下の latin1 カラムの値が設定されているとします。
Muffler M@"uller MX Systems MySQL |
さらに、以下のステートメントを使用してカラムの値を取得したとします。
SELECT X FROM T ORDER BY X COLLATE collation_name; |
異なった照合順序に対する値の順序は以下のようになります。
latin1_swedish_ci | latin1_german1_ci | latin1_german2_ci |
| Muffler | Muffler | M@"uller |
| MX Systems | M@"uller | Muffler |
| M@"uller | MX Systems | MX Systems |
| MySQL | MySQL | MySQL |
この表は、複数の異なった照合順序を ORDER BY 節で使用した結果の一例です。この例では、2 個の点が上に付いている U が問題の原因です。この文字をドイツではウムラウトと呼んでいますが、私たちは分音記号付きの U と呼んでいます。
最初のカラムには、スウェーデン語/フィンランド語の照合ルールを使用したSELECT の結果が示されています。この照合ルールによると、分音記号付きの U は Y と一致します。
2 番目のカラムには、ドイツ語の DIN-1 ルールを使用した SELECT の結果が示されています。このルールによると、分音記号付きの U は U と一致します。
3 番目のカラムには、ドイツ語の DIN-2 ルールを使用したSELECT の結果が示されています。このルールによると、分音記号付きの U は UE と一致します。
3 つの異なった照合順序が、3 つの異なった結果をもたらしています。これこそ正に MySQL で対処すべき状況です。適切な照合順序を使用すると、任意のソート順序を選択できます。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
| 9.4.1 結果文字列 | ||
9.4.2 CONVERT() | ||
9.4.3 CAST() | ||
9.4.4 SHOW CHARACTER SET | ||
9.4.5 SHOW COLLATION | ||
9.4.6 SHOW CREATE DATABASE | ||
9.4.7 SHOW FULL COLUMNS |
このセクションでは、キャラクタセット情報を計算に入れる演算について説明します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL には、文字列を返す多数の演算子と関数があります。 このセクションでは、そのような文字列のキャラクタセットと照合順序について解説しています。
文字列の入力を取得して文字列の結果を出力として返す単純な関数では、出力のキャラクタセットおよび照合順序は主要な入力のキャラクタセットおよび照合順序と同じです。たとえば UPPER(X) は、キャラクタセットおよび照合が X と一致する文字列を返します。
同じことは以下についても当てはまります。
INSTR(),
LCASE(),
LOWER(),
LTRIM(),
MID(),
REPEAT(),
REPLACE(),
REVERSE(),
RIGHT(),
RPAD(),
RTRIM(),
SOUNDEX(),
SUBSTRING(),
TRIM(),
UCASE(),
UPPER()。
(注意: REPLACE() 関数は他のすべての関数とは異なり、文字列入力の照合順序を無視し、大文字と小文字が区別されない比較を毎回実行します。)
複数の文字列入力を組み合わせて単一の文字列出力を返す操作には、SQL-99 の "集約ルール" が適用されます(以下を参照)。
COLLATE X が存在する場合は X を使用する。
COLLATE X と COLLATE Y が存在する場合はエラーになる。
X であるときは X を使用する。
たとえば、CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END と指定されている場合、照合順序は X になります。同じことは以下についても当てはまります。
CONCAT(),
GREATEST(),
IF(),
LEAST(),
CASE,
UNION,
||,
ELT()。
文字データに変換する操作のため、結果文字列のキャラクタセットと照合順序は 接続/リテラルキャラクタセットに含まれており、接続/リテラル照合順序を持っています。
このことは以下についても当てはまります。
CHAR(),
CAST(),
CONV(),
FORMAT()。
HEX(),
SPACE()。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
CONVERT()
CONVERT() を使用すると、異なるキャラクタセット間でデータを変換することができます。構文は以下のとおりです。
CONVERT(expr USING transcoding_name) |
MySQL では、トランスコーディング名は対応するキャラクタセット名と同じです。
例:
SELECT CONVERT(_latin1'M@"uller' USING utf8); INSERT INTO utf8table (utf8column) SELECT CONVERT(latin1field USING utf8) FROM latin1table; |
CONVERT(... USING ...) は、SQL-99 の仕様に基づき実装されています。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
CAST()
CAST() を使用し、文字列を別のキャラクタセットに変換することもできます。新しい書式は以下のとおりです。
CAST ( character_string AS character_data_type
CHARACTER SET character_set_name )
|
例:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8); |
COLLATE 節を CAST() の内部で使用することはできませんが、外部では使用することができます。したがって、CAST(... COLLATE ...) は無効ですが、CAST(...) COLLATE ... は有効です。
例:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin; |
CAST() を CHARACTER SET の指定なしで使用した場合、キャラクタセットと照合順序は接続/リテラルキャラクタセットとそのデフォルト照合順序になります。CAST() を CHARACTER SET X の指定ありで使用した場合、キャラクタセットは X、照合順序は X のデフォルト照合順序になります。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
SHOW CHARACTER SET
SHOW CHARACTER SET コマンドを実行すると、使用可能なキャラクタセットがすべて表示されます。
オプション節 LIKE を指定すると、条件にマッチするキャラクタセットを表示することができます。
例:
mysql> SHOW CHARACTER SET LIKE 'latin%'; +---------+-----------------------------+-------------------+--------+ | Charset | Description | Default collation | Maxlen | +---------+-----------------------------+-------------------+--------+ | latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | +---------+-----------------------------+-------------------+--------+ 4 rows in set (0.00 sec) |
上の一覧に関する注意:
Maxlen カラムは、1 文字を格納するための最大バイト数を示します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
SHOW COLLATION
SHOW COLLATION コマンドを実行すると、使用可能なキャラクタセットがすべて表示されます。
オプション節 LIKE を指定すると、条件にマッチする照合順序名が表示されます。
mysql> SHOW COLLATION LIKE 'latin1%'; +-------------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +-------------------+---------+----+---------+----------+---------+ | latin1_german1_ci | latin1 | 5 | | | 0 | | latin1_swedish_ci | latin1 | 8 | Yes | Yes | 0 | | latin1_danish_ci | latin1 | 15 | | | 0 | | latin1_german2_ci | latin1 | 31 | | Yes | 2 | | latin1_bin | latin1 | 47 | | Yes | 0 | | latin1_general_ci | latin1 | 48 | | | 0 | | latin1_general_cs | latin1 | 49 | | | 0 | +-------------------+---------+----+---------+----------+---------+ 7 rows in set (0.00 sec) |
Default カラムは、照合順序がそのキャラクタセットのデフォルトであるかどうかを示します。
Compiled は、キャラクタセットがサーバにコンパイルされているかどうかを示します。
Sortlen は、キャラクタセットでソート文字列を表現するために必要なメモリの容量に関連します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
SHOW CREATE DATABASE
以下のクエリは、指定されたデータベースを作成する CREATE DATABASE ステートメントを示します。実行結果には、データベースオプションがすべて含まれています。DEFAULT CHARACTER SET と COLLATE がサポートされています。データベースオプションがすべて保存されている単一のテキストファイルがデータベースディレクトリにあります。
mysql> SHOW CREATE DATABASE a; +----------+-----------------------------------------------------------+ | Database | Create Database | +----------+-----------------------------------------------------------+ | a | CREATE DATABASE `a` /*!40100 DEFAULT CHARACTER SET macce COLLATE macce_ci_ai */ | +----------+-----------------------------------------------------------+ 1 row in set (0.00 sec) |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
SHOW FULL COLUMNS
SHOW COLUMNS ステートメントを SHOW FULL COLUMNS として呼び出したときは、テーブルのカラムの照合順序を示します。
データ型が CHAR、VARCHAR、TEXT のいずれかであるカラムは、照合順序が NULL になっていません。数値型と文字型以外のカラムは、照合順序が NULL になっています。例:
mysql> SHOW FULL COLUMNS FROM a; +-------+---------+-------------------+------+-----+---------+-------+ | Field | Type | Collation | Null | Key | Default | Extra | +-------+---------+-------------------+------+-----+---------+-------+ | a | char(1) | latin1_swedish_ci | YES | | NULL | | | b | int(11) | NULL | YES | | NULL | | +-------+---------+-------------------+------+-----+---------+-------+ 2 rows in set (0.02 sec) |
キャラクタセットは表示対象に含まれていません。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL バージョン 4.1 以降、Unicode データを保存するために次の新しいキャラクタセットが用意されています:
ucs2 (UCS-2 Unicode キャラクタセット)および utf8 (Unicode キャラクタセットの UTF-8 エンコード)。
一時的な制限:UCS-2 はクライアントキャラクタセットとしては(まだ)使用できません。つまり、SET NAMES ucs2 は有効ではないということです。
ヒント:スペースを UTF8 で保存するには、CHAR ではなく VARCHAR を使用してください。
そのようにしないと、MySQL では CHAR(10) CHARACTER SET utf8 カラムに対して 30 バイトを確保しなければなりません。これは、使用可能な最大長が 30 バイトであるためです。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
メタデータとは、データについてのデータです。データベースの内容となっているデータではなく、データベースについて説明するデータがメタデータです。したがって、カラム名、データベース名、ユーザ名、バージョン名のほか、SHOW を実行して表示される文字列の多くがメタデータに該当します。
すべてのメタデータはキャラクタセットが一致している必要があります(そうなっていない場合、SHOW は正しく実行されるとは限りません。同じカラムに含まれる個々のレコードのキャラクタセットが一致しない可能性があるからです)。一方、すべての言語によるすべての文字がメタデータに含まれている必要があります(そうなっていない場合、ユーザがカラムやテーブルの名称を母国語で設定できない可能性があります)。上記 2 つの目的を考慮するため、MySQL ではメタデータが Unicode キャラクタセット(UTF8)で保存されます。これによって不具合が発生しないのは、アクセント付き文字を使用しない場合です。使用する場合、メタデータのキャラクタセットが UTF8 であることを認識する必要があります。
つまり、USER()(およびそのシノニム SESSION_USER() と SYSTEM_USER())、CURRENT_USER()、VERSION() の各関数では、UTF8 キャラクタセットがデフォルトで使用されます。
ただし、カラムのヘッダと DESCRIBE 関数の実行結果がデフォルトで UTF8 キャラクタセットになるということではありません
(SELECT column1 FROM t と指定すると、名称 column1 自体がクライアントのキャラクタセットによりサーバからクライアントに返されます。このキャラクタセットは、SET NAMES ステートメントで決定されたものです)。
サーバからメタデータの結果が UTF8 以外のキャラクタセットで返されるようにするには、( 「9.3.6 接続のキャラクタセットおよび照合順序」 節 参照 )の変換を SET CHARACTER SET によってサーバに実行させるか、変換がクライアントで実行されるように設定します。クライアントに変換を実行させる方が常に効率的ですが、このオプションは MySQL 4.x の製品サイクル後期まで使用することができません。
たとえば、USER() 関数を比較または割当のために単一のステートメントで使用しているとします。
MySQL には自動変換機能が用意されています。
SELECT * FROM Table1 WHERE USER() = latin1_column; |
この機能が有効なのは、latin1_column の内容が UTF8 へと自動的に変換されてから比較が行われるからです。
INSERT INTO Table1 (latin1_column) SELECT USER(); |
この機能が有効なのは、USER() の内容が latin1 へと自動的に変換されてから割当が行われるからです。
自動変換機能は完全には実装されていませんが、将来のバージョンでは適切に動作する予定です。
自動変換機能は SQL 標準に含まれていません。ただし、どのキャラクタセットも(サポートされている文字に関して)Unicode の "サブセット" であることが SQL 標準の文書に記載されています。「スーパーセットに適用されるものはサブセットにも適用される」という有名な原則があるので、Unicode の照合順序は Unicode 以外の文字列との比較にも適用できると考えられます。
バージョン 4.1.1 注意:この時点から、`errmsg.txt' ファイルはすべて UTF8 になります。クライアントのキャラクタセットへの変換は、メタデータに関しては自動的に行われます。結果セットを返す場合のデフォルトの動作を変更することができます。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
SAP DB の互換性に関し、以下の 2 つのステートメントは同じです。
CREATE TABLE t1 (f1 CHAR(n) UNICODE); CREATE TABLE t1 (f1 CHAR(n) CHARACTER SET ucs2); |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL 4.1 の場合、キャラクタセットの設定は XML ファイルに保存されます。キャラクタセットごとに 1 ファイルが使用されます(以前のバージョンでは、キャラクタセット設定情報は `.conf' ファイルに保存されました)。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
MySQL-4.x とそれ以前のバージョンでは、NCHAR と CHAR は同義語でした。ANSI では、事前定義キャラクタセットが CHAR カラムで使用されるように指定する方法の 1 つとして NCHAR または NATIONAL CHAR を定義しています。MySQL では、utf8 が事前定義キャラクタセットとして使用されます。たとえば、以下のカラム型宣言
CHAR(10) CHARACTER SET utf8 NATIONAL CHARACTER(10) NCHAR(10) |
は、以下のカラム型宣言と等価です。
VARCHAR(10) CHARACTER SET utf8 NATIONAL VARCHAR(10) NCHAR VARCHAR(10) NATIONAL CHARACTER VARYING(10) NATIONAL CHAR VARYING(10) |
N'literal' を使用して、各国キャラクタセットの文字列を作成することができます。
以下の 2 つのステートメントは等価です。
SELECT N'some text'; SELECT _utf8'some text'; |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
| 9.10.1 4.0 キャラクタセットおよび対応する 4.1 キャラクタセット/照合順序のペア |
ここでは、旧バージョンの MySQL からのアップグレードについて説明します。MySQL 4.1 では、MySQL 4.0 との上位互換性がほぼ完全に確保されており、その理由は単に機能の大半が新しい点にあります。したがって、コンフリクトを引き起こす要素は旧バージョンに存在しません。ただし、相違点と注意点がいくつかあります。
最重要:"MySQL 4.0 キャラクタセット" には、"MySQL 4.1 キャラクタセット" と "MySQL 4.1 照合順序" の両方の特性が含まれています。しかし、これを覚えておく必要はありません。今後は、同じ複合オブジェクト内でキャラクタセットまたは照合順序特性を並存させない予定です。
MySQL には各国キャラクタセットに関する特別な処理が用意されています。
4.1. NCHAR は CHAR と同じではなく、N'...' リテラルは '...' リテラルと同じではありません。
最後に、キャラクタセットと照合順序に関する情報を格納するための特別なファイル形式があります。新規設定ファイルを含む `/share/mysql/charsets/' ディレクトリの再インストールが済んでいることを確認してください。
MySQL 4.0 で作成したデータを使用し、mysqld を 4.1.x ディストリビューションから起動するには、同じキャラクタセットと照合順序でサーバを起動する必要があります。この場合、データのインデックスを再作成する必要はありません。
上記を実行する方法は以下の 2 とおりです。
shell> ./configure --with-character-set=... --with-collation=... shell> ./mysqld --default-character-set=... --default-collation=... |
たとえば、mysql を MySQL 4.0 danish キャラクタセットと共に使用する場合、latin1 キャラクタセットと latin1_danish_ci 照合順序を使用する必要があります。
shell> ./configure --with-character-set=latin1
--with-collation=latin1_danish_ci
shell> ./mysqld --default-character-set=latin1
--default-collation=latin1_danish_ci
|
次のセクションに示された表を使用し、古い 4.0 キャラクタセット名とそれに対応する 4.1 キャラクタセット/照合順序のペアを検索します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
| ID | 4.0 キャラクタセット | 4.1 キャラクタセット | 4.1 照合順序 |
| 1 | big5 | big5 | big5_chinese_ci |
| 2 | czech | latin2 | latin2_czech_ci |
| 3 | dec8 | dec8 | dec8_swedish_ci |
| 4 | dos | cp850 | cp850_general_ci |
| 5 | german1 | latin1 | latin1_german1_ci |
| 6 | hp8 | hp8 | hp8_english_ci |
| 7 | koi8_ru | koi8r | koi8r_general_ci |
| 8 | latin1 | latin1 | latin1_swedish_ci |
| 9 | latin2 | latin2 | latin2_general_ci |
| 10 | swe7 | swe7 | swe7_swedish_ci |
| 11 | usa7 | ascii | ascii_general_ci |
| 12 | ujis | ujis | ujis_japanese_ci |
| 13 | sjis | sjis | sjis_japanese_ci |
| 14 | cp1251 | cp1251 | cp1251_bulgarian_ci |
| 15 | danish | latin1 | latin1_danish_ci |
| 16 | hebrew | hebrew | hebrew_general_ci |
| 17 | win1251 | (removed) | (removed) |
| 18 | tis620 | tis620 | tis620_thai_ci |
| 19 | euc_kr | euckr | euckr_korean_ci |
| 20 | estonia | latin7 | latin7_estonian_ci |
| 21 | hungarian | latin2 | latin2_hungarian_ci |
| 22 | koi8_ukr | koi8u | koi8u_ukrainian_ci |
| 23 | win1251ukr | cp1251 | cp1251_ukrainian_ci |
| 24 | gb2312 | gb2312 | gb2312_chinese_ci |
| 25 | greek | greek | greek_general_ci |
| 26 | win1250 | cp1250 | cp1250_general_ci |
| 27 | croat | latin2 | latin2_croatian_ci |
| 28 | gbk | gbk | gbk_chinese_ci |
| 29 | cp1257 | cp1257 | cp1257_lithuanian_ci |
| 30 | latin5 | latin5 | latin5_turkish_ci |
| 31 | latin1_de | latin1 | latin1_german2_ci |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
| 9.11.1 Unicode キャラクタセット | ||
| 9.11.2 プラットフォーム固有のキャラクタセット | ||
| 9.11.3 南ヨーロッパおよび中東のキャラクタセット | ||
| 9.11.4 アジアのキャラクタセット | ||
| 9.11.5 バルト語キャラクタセット | ||
| 9.11.6 キリル語キャラクタセット | ||
| 9.11.7 中央ヨーロッパのキャラクタセット | ||
| 9.11.8 西ヨーロッパのキャラクタセット |
MySQL でサポートされるキャラクタセットと照合順序の注釈付き一覧を以下に示します。オプションとインストール時の設定が異なるため、一覧に含まれている項目の一部が表示されないサーバもあります。また、新しいキャラクタセットまたは照合順序の定義は簡単なので、一覧に含まれていない項目が表示されるサーバもあります。
MySQL では、30 を超えるキャラクタセットに対して 70 を超える照合順序がサポートされています。
mysql> SHOW CHARACTER SET; +----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | cp1251 | Windows Cyrillic | cp1251_bulgarian_ci | 1 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | cp1250 | Windows Central European | cp1250_general_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | | cp866 | DOS Russian | cp866_general_ci | 1 | | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 | | macce | Mac Central European | macce_general_ci | 1 | | macroman | Mac West European | macroman_general_ci | 1 | | cp852 | DOS Central European | cp852_general_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | | cp1256 | Windows Arabic | cp1256_general_ci | 1 | | cp1257 | Windows Baltic | cp1257_general_ci | 1 | | binary | Binary pseudo charset | binary | 1 | +----------+-----------------------------+---------------------+--------+ 33 rows in set (0.01 sec) |
注意:すべてのキャラクタセットにバイナリ照合順序が存在します。ただし、以降の説明ではバイナリ照合順序について取り上げていないこともあります。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
Unicode キャラクタセットが 2 つ存在することは言うまでもありません。これらのキャラクタセットを使用し、約 650 の言語でテキストを保存することができます。2 つの新しいキャラクタセットに対応する多くの照合順序は追加されていませんが、間もなく追加される予定です。現在、大文字と小文字およびアクセントが区別されないデフォルトの照合順序のほか、バイナリ照合順序があります。
+---------+-----------------+-------------------+--------+ | Charset | Description | Default collation | Maxlen | +---------+-----------------+-------------------+--------+ | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | +---------+-----------------+-------------------+--------+ |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
+----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | dec8 | DEC West European | dec8_swedish_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | +----------+-----------------------------+---------------------+--------+ |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
+----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | cp1256 | Windows Arabic | cp1256_general_ci | 1 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | geostd8 | Georgian | geostd8_general_ci | 1 | +----------+-----------------------------+---------------------+--------+ |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
サポートされているアジアのキャラクタセットには、中国語、日本語、韓国語、タイ語が含まれています。これらは複雑な場合があります。たとえば、中国語のキャラクタセットは数千種類の文字に対応していなければなりません。
+----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | +----------+-----------------------------+---------------------+--------+ |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
バルト語キャラクタセットには、エストニア語、ラトビア語、リトアニア語が含まれています。現在サポートされているバルト語キャラクタセットは以下の 2 つです:
latin7(ISO 8859-13 バルト語):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | latin7_estonian_cs | latin7 | 20 | | | 0 | | latin7_general_ci | latin7 | 41 | Yes | | 0 | | latin7_general_cs | latin7 | 42 | | | 0 | | latin7_bin | latin7 | 79 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
cp1257(Windows バルト語):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | cp1257_lithuanian_ci | cp1257 | 29 | | | 0 | | cp1257_bin | cp1257 | 58 | | | 0 | | cp1257_general_ci | cp1257 | 59 | Yes | | 0 | +----------------------+----------+----+---------+----------+---------+ |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
ベラルーシ語、ブルガリア語、ロシア語、ウクライナ語と共に使用するキリル語のキャラクタセットおよび照合順序を以下に示します。
cp1251(Windows キリル語)
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | cp1251_bulgarian_ci | cp1251 | 14 | | | 0 | | cp1251_ukrainian_ci | cp1251 | 23 | | | 0 | | cp1251_bin | cp1251 | 50 | | | 0 | | cp1251_general_ci | cp1251 | 51 | Yes | | 0 | | cp1251_general_cs | cp1251 | 52 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
cp866 (DOS ロシア語):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | cp866_general_ci | cp866 | 36 | Yes | | 0 | | cp866_bin | cp866 | 68 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
koi8r(KOI8-R Relcom Russian、Unix 上で主としてロシア語に使用):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | koi8r_general_ci | koi8r | 7 | Yes | | 0 | | koi8r_bin | koi8r | 74 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
koi8u(KOI8-R Ukrainian、Unix 上で主としてウクライナ語に使用):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | koi8u_general_ci | koi8u | 22 | Yes | | 0 | | koi8u_bin | koi8u | 75 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
チェコ、スロバキア、ハンガリー、ルーマニア、スロベニア、クロアチア、ポーランドで使用されるキャラクタセットも一部サポートされています。
cp1250(Windows 中央ヨーロッパ):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | cp1250_general_ci | cp1250 | 26 | Yes | | 0 | | cp1250_czech_ci | cp1250 | 34 | | Yes | 2 | | cp1250_bin | cp1250 | 66 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
cp852(DOS 中央ヨーロッパ):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | cp852_general_ci | cp852 | 40 | Yes | | 0 | | cp852_bin | cp852 | 81 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
macce(Mac 中央ヨーロッパ):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | macce_general_ci | macce | 38 | Yes | | 0 | | macce_bin | macce | 43 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
latin2(ISO 8859-2 中央ヨーロッパ):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | latin2_czech_ci | latin2 | 2 | | Yes | 4 | | latin2_general_ci | latin2 | 9 | Yes | | 0 | | latin2_hungarian_ci | latin2 | 21 | | | 0 | | latin2_croatian_ci | latin2 | 27 | | | 0 | | latin2_bin | latin2 | 77 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
keybcs2(DOS Kamenicky Czech-Slovak):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | keybcs2_general_ci | keybcs2 | 37 | Yes | | 0 | | keybcs2_bin | keybcs2 | 73 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |
西ヨーロッパのキャラクタセットには、大部分の西ヨーロッパ言語(フランス語、スペイン語、カタロニア語、バスク語、ポルトガル語、イタリア語、アルバニア語、オランダ語、ドイツ語、デンマーク語、スウェーデン語、ノルウェー語、フィンランド語、フェロー語、アイスランド語、アイルランド語、スコットランド語、英語など)が含まれています。
latin1(ISO 8859-1 西ヨーロッパ):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | latin1_german1_ci | latin1 | 5 | | | 0 | | latin1_swedish_ci | latin1 | 8 | Yes | Yes | 0 | | latin1_danish_ci | latin1 | 15 | | | 0 | | latin1_german2_ci | latin1 | 31 | | Yes | 2 | | latin1_bin | latin1 | 47 | | Yes | 0 | | latin1_general_ci | latin1 | 48 | | | 0 | | latin1_general_cs | latin1 | 49 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
latin1_swedish_ci 照合順序は、MySQL ユーザの大多数がデフォルトとして使用していると考えられます。一貫して述べてきたように、これはスウェーデン語/フィンランド語の照合順序ルールに基づいていますが、スウェーデンとフィンランドには意見の異なるユーザも存在します。
latin1_german1_ci および latin1_german2_ci 照合順序は DIN-1 および DIN-2 標準に基づきます。ここで DIN とは Deutsches Institut f@"ur Normung(ドイツ工業規格。ANSI のドイツ版)を指します。
DIN-1 は辞書照合、DIN-2 は電話帳照合と呼ばれています。
latin1_german1_ci(辞書)ルール:
`@"A' = `A', `@"O' = `O', `@"U' = `U', `ß' = `s' |
latin1_german2_ci(電話帳)ルール:
`@"A' = `AE', `@"O' = `OE', `@"U' = `UE', `ß' = `ss' |
macroman(Mac 西ヨーロッパ):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | macroman_general_ci | macroman | 39 | Yes | | 0 | | macroman_bin | macroman | 53 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
cp850(DOS 西ヨーロッパ):
+----------------------+----------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------------+----------+----+---------+----------+---------+ | cp850_general_ci | cp850 | 4 | Yes | | 0 | | cp850_bin | cp850 | 80 | | | 0 | +----------------------+----------+----+---------+----------+---------+ |
| [ << ] | [ >> ] | [Top ] | [Contents ] | [Index] | [ ? ] |