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


10.1.12メタデータ用のutf - 8

メタデータデータに関するデータです。データベースについて記述しているすべてのものがメタデータであり,データベースの内容ではありません。したがって,カラム名,データベース名,ユーザー名,バージョン名,および显示の文字列結果のほとんどがメタデータです。INFORMATION_SCHEMA内のテーブルは定義上,データベースオブジェクトに関する情報を含んでいるので,これは,このテーブルの内容にも当てはまります。

メタデータの表現は次の要件を満たしている必要があります。

  • すべてのメタデータで文字セットが一致している必要があります。それ以外の場合,INFORMATION_SCHEMA内のテーブルに対する显示ステートメントも选择ステートメントも正しく機能しません。これらの演算結果の同一カラム内の各行で文字セットが異なるからです。

  • メタデータはすべての言語のすべての文字が含まれている必要があります。そうでない場合,ユーザーはそれぞれの言語を使用してカラムとテーブルに名前を付けることはできません。

両方の要件を満たすために,MySQLでは,Unicode文字セット,つまりutf - 8でメタデータを格納します。アクセント符号付きの文字またはラテン語以外の文字を使用しなければ,混乱が生じることはありません。ただし,使用した場合は,メタデータの文字セットがutf - 8であることを認識する必要があります。

このメタデータ要件は,用户()CURRENT_USER ()为SESSION_USER ()SYSTEM_USER ()数据库(),および(版本)の関数の戻り値で,utf - 8文字セットがデフォルトで使用されることを意味します。

サーバーは,character_set_systemシステム変数をメタデータ文字セットの名前に設定します。

mysql> SHOW VARIABLES LIKE 'character_set_system';+----------------------+-------+ | Variable_name |值  | +----------------------+-------+ | character_set_system | utf8  | +----------------------+-------+

Unicodeを使用してメタデータを格納しても,サーバーが,カラムのヘッダーや描述関数の結果を,デフォルトでcharacter_set_system文字セットで返すことにはなりませんSELECT column1 FROM tを使用すると,character_set_resultsシステム変数の値(デフォルト値はlatin1)で特定される文字セットで,名前column1自体がサーバーからクライアントに返されます。別の文字セットでメタデータの結果をサーバーに返させる場合は,组名称ステートメントを使用してサーバーに文字セット変換を強制的に実行させてください。组名称character_set_resultsおよび関連するほかのシステム変数を設定します。(セクション10.1.4”接続文字セットおよび照合順序”を参照してください)また,サーバーから結果を受け取ったあとで,クライアントプログラムが変換を実行できます。クライアントが変換を実行するとより効率的ですが,このオプションは,すべてのクライアントが常に使用できるとはかぎりません。

character_set_resultsに設定されている場合,変換は実行されず,サーバーはオリジナルの文字セット(character_set_systemによって指定されたセット)を使用してメタデータを返します。

サーバーからクライアントに返されるエラーメッセージは,メタデータと同様に自動的にクライアントの文字セットに変換されます。

たとえば,用户()関数を比較または割り当てのために単一のステートメント内で使用している場合,問題はありません。MySQLが自動的に変換を実行します。

SELECT * FROM t1 WHERE USER() = latin1_column;

これが機能するのは,latin1_columnの内容がutf - 8に自動的に変換されてから比較が行われるからです。

INSERT INTO t1 (latin1_column) SELECT USER();

これが機能するのは,用户()の内容がlatin1に自動的に変換されてから割り当てが行われるからです。

自動変換機能はSQL標準には含まれていません。ただし,どの文字セットも(サポートされている文字に関して)UnicodeのサブセットであることがSQL標準のドキュメントに記載されています。スーパーセットに適用されるものはサブセットにも適用されるというよく知られた原則があるので,Unicodeの照合順序はUnicode以外の文字列との比較にも適用できると考えられます。文字列の強制力の詳細は,セクション10.1.7.5”式の照合順序”を参照してください。