目次
MySQLでは、各種のキャラクタセットを使用してデータを保存したり、各種の照合順序を使用してデータを比較したりできます。サーバ、データベース、テーブルおよびカラムレベルでのキャラクタセット指定が可能です。MySQLは、MyISAM
、MEMORY
、NDBCluster
そしてInnoDB
記憶エンジンでのキャラクタセット使用をサポートしています。
この章では、以下について説明します。
キャラクタセットと照合順序とは
マルチレベルデフォルトシステム
キャラクタセットと照合順序の指定構文
影響を受ける関数と演算
Unicodeのサポート
利用可能なキャラクタセットと照合順序の注意点
キャラクタセットから生じた問題は、データ保存だけでなく、クライアントプログラムとMySQLサーバ間の通信にも影響を与えます。デフォルトと異なるキャラクタセットを使用してクライアントプログラムとサーバ間の通信を行いたい場合、どれを使用するのかを知らせる必要があります。例えば、utf8
Unicode
キャラクタセットを使用するには、サーバ接続後にその旨を知らせてください。
SET NAMES 'utf8';
キャラクタセットに関するクライアント−サーバ間の通信問題について、さらに詳しく知りたい場合はこちらを参照してください。項9.4. 「接続のキャラクタセットおよび照合順序」.
キャラクタセット とは、シンボルとエンコードのセットです。照合順序とは、キャラクタセット内の文字を比較するためのルールを集めたものです。架空のキャラクタセットを例にして、キャラクタセットと照合順序の違いを見てみましょう。
次の 4
文字で構成されるアルファベットがあるとします:‘A
’、‘B
’、‘a
’、‘b
’次のように、各文字に対して番号を指定します:‘A
’
= 0、‘B
’ =
1、‘a
’ =
2、‘b
’ =
3 文字‘A
’はシンボルであり、数字0はエンコードされた‘A
’です。4文字のすべてとそれぞれのエンコードを組み合わせたものをキャラクタセットと呼びます。
次に、文字列値‘A
’と‘B
’を比較してみましょう。最も簡単に比較するには、エンコードを確認します。‘A
’は0、‘B
’は1です。0は1よりも小さいので、‘A
’は‘B
’よりも小さいと表現することができます。今ここで行ったのは、キャラクタセットに対する照合順序の適用です。照合順序はルールの集まりであり、上記の場合にはルールは:「エンコードの比較」(この場合ルールは1つのみになります)。これは可能な照合順序のうちで最も単純なものであり、バイナリ照合順序と呼ばれています。
しかし、小文字と大文字を等しいと表現したい場合にはどうなるのでしょうか。その場合、少なくとも次の
2
つのルールが必要です。(1)小文字の‘a
’および‘b
’が大文字の‘A
’および‘B
’と同じであると見なす。(2)その後にエンコードを比較する。これは大文字と小文字を区別しない照合順序と呼ばれ。バイナリ照合順序よりも少し複雑です。
実際は、大半のキャラクタセットに多数の文字が含まれています。‘A
’と‘B
’だけではなく、アルファベットの全体から構成されています。ときには複数のアルファベットや、数千文字からなる東洋の書記体系に、多くの特殊記号や終止符が付属することもあります。また、実際には大半の照合順序に多くのルールがあります。大文字と小文字が区別されないだけではありません。アクセントが区別されない(「アクセント」はドイツ語での‘O
’のように文字に追加されるマーク)、あるいは複数文字マッピング(ドイツ語照合順序のどちらかにおける‘O
’
=
‘OE
’のルールなど)といったルールがあります。
MySQLでは以下が可能です。
各種のキャラクタセットを使用して文字列を保存する。
各種の照合順序を使用して文字列を比較する。
同じサーバ、同じデータベース、あるいは同じテーブル内の異なったキャラクタセットまたは照合順序と文字列を結合する。
任意のレベルでキャラクタセットと照合順序を指定できるようにする。
MySQLはこれらの点において、他のDBMSに大きく差をつけています。ただし、新機能を効率的に使用するには、利用可能なキャラクタセット、各デフォルトの変更方法、各種の列演算子による処理内容を知っておかなければなりません。
MySQLサーバでは複数のキャラクタセットがサポートされています。利用可能なキャラクタセットは、SHOW
CHARACTER
SET
ステートメントを実行するとリストアップされます。リストの一部を以下に表示します。さらに詳しい情報が必要な場合は、次を参照してください。項9.10. 「MySQL でサポートされるキャラクタセットと照合順序」。
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 | cp1252 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 |
| 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 |
...
キャラクタセットには少なくとも1つの照合順序が含まれており、複数の照合順序が含まれていることもあります。あるキャラクタセットに対して存在する照合順序をリストアップするには、SHOW
COLLATION
ステートメントを実行してください。例えば、キャラクタセットlatin1
(cp1252
西ヨーロッパ言語)に含まれる照合順序を調べるには、このステートメントを実行するとlatin1
で始まる照合順序が見つかります。
mysql> SHOW COLLATION LIKE 'latin1%';
+---------------------+---------+----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+---------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1 | 5 | | | 0 |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
| latin1_danish_ci | latin1 | 15 | | | 0 |
| latin1_german2_ci | latin1 | 31 | | Yes | 2 |
| latin1_bin | latin1 | 47 | | Yes | 1 |
| latin1_general_ci | latin1 | 48 | | | 0 |
| latin1_general_cs | latin1 | 49 | | | 0 |
| latin1_spanish_ci | latin1 | 94 | | | 0 |
+---------------------+---------+----+---------+----------+---------+
latin1
の照合順序には以下の意味があります:
照合順序 | 意味 |
latin1_german1_ci | ドイツ語 DIN-1 |
latin1_swedish_ci | スウェーデン語/フィンランド語 |
latin1_danish_ci | デンマーク語/ノルウェー語 |
latin1_german2_ci | ドイツ語 DIN-2 |
latin1_bin | latin1 エンコードに基づくバイナリ |
latin1_general_ci | マルチリンガル(西ヨーロッパ言語) |
latin1_general_cs | マルチリンガル(ISO 西ヨーロッパ言語)大文字と小文字が区別される |
latin1_spanish_ci | 現代スペイン語 |
照合順序にはこれらの一般的な特徴があります。
2 つの異なるキャラクタセットが同じ照合順序を共有することはできません。
各キャラクタセットには、デフォルト照合順序が1つ存在します。例えば、latin1
のデフォルト照合順序はlatin1_swedish_ci
です。SHOW
CHARACTER
SET
から、どの照合順序が表示されているどのキャラクタセットのデフォルトであるかがわかります。
照合順序名には次の規則が適用されます。関連するキャラクタセットの名前で始まる。通常は言語名が含まれており、_ci
(大文字と小文字が区別されない)、_cs
(大文字と小文字が区別される)、_bin
(バイナリ)のいずれかで終わる。
サーバ、データベース、テーブル、カラムの 4 段階で、キャラクタセットと照合順序のデフォルト設定が用意されています。以下の説明は複雑に見えるかもしれませんが、マルチレベルのデフォルト設定では自然かつ明確な結果を得られることが実際に判明しています。
CHARACTER
SET
はキャラクタセットを指定する節で使用します。CHARSET
はCHARACTER
SET
の同義語として使用します。
MySQLサーバにはサーバキャラクタセットとサーバ照合順序があります。サーバキャラクタセットとサーバ照合順序は、サーバ起動時に設定でき、ランタイムで変更できます。
サーバのキャラクタセットと照合順序は、mysqldの起動時に使用するオプションに依存します。--character-set-server
をキャラクタセットに対して使用でき、--collation-server
を照合順序に対して追加することもできます。キャラクタセットを指定しないのは、--character-set-server=latin1
を指定した場合と同じです。キャラクタセット(例えばlatin1
)のみを指定して照合順序を指定しないのは、--character-set-server=latin1
--collation-server=latin1_swedish_ci
を指定した場合と同じです。これはlatin1_swedish_ci
がlatin1
のデフォルト照合順序であるためです。したがって、以下の
3
つのコマンドを実行すると、いずれも同じ結果になります。
shell>mysqld
shell>mysqld --character-set-server=latin1
shell>mysqld --character-set-server=latin1 \
--collation-server=latin1_swedish_ci
設定を変更する手段の 1
つは再コンパイルです。ソースからのビルド時にデフォルトのサーバキャラクタセットと照合順序を変更するには、--with-charset
と--with-collation
をconfigureの引数として使用してください。例:
shell> ./configure --with-charset=latin1
または
shell>./configure --with-charset=latin1 \
--with-collation=latin1_german1_ci
mysqldとconfigureでは、キャラクタセットと照合順序の組み合わせが有効かどうかチェックされます。組み合わせが有効でない場合、各プログラムによってエラーメッセージが表示され、強制終了されます。
最新のサーバキャラクタセットと照合順序は、character_set_server
およびcollation_server
のシステム変数値で決定されます。これらの変数はランタイムで変更可能です。
各データベースにはデータベースキャラクタセットとデータベース照合順序があります。CREATE
DATABASE
およびALTER
DATABASE
ステートメントには、データベースのキャラクタセットと照合順序を指定するためのオプション節があります。
CREATE DATABASEdb_name
[[DEFAULT] CHARACTER SETcharset_name
] [[DEFAULT] COLLATEcollation_name
] ALTER DATABASEdb_name
[[DEFAULT] CHARACTER SETcharset_name
] [[DEFAULT] COLLATEcollation_name
]
SCHEMA
というキーワードはDATABASE
の代わりに使用できます。
すべてのデータベースオプションは、データベースディレクトリ内のdb.opt
というテキストファイルに保存されます。
CHARACTER
SET
およびCOLLATE
節で、キャラクタセットと照合順序が異なる複数のデータベースを同一のMySQLサーバ上に作成することができます。
例:
CREATE DATABASE db_name
CHARACTER SET latin1 COLLATE latin1_swedish_ci;
MySQL では、データベースキャラクタセットとデータベース照合順序が次のように選択されます。
CHARACTER SET
とX
COLLATE
の両方を指定した場合は、キャラクタセットY
X
と照合順序Y
。
CHARACTER SET
を指定し、X
COLLATE
を指定しなかった場合は、キャラクタセットX
とそのデフォルト照合順序。
COLLATE
を指定し、Y
CHARACTER
SET
を指定しなかった場合は、Y
関連のキャラクタセットと照合順序Y
。
その他の場合は、サーバキャラクタセットとサーバ照合順序。
テーブルのキャラクタセットと照合順序がCREATE
TABLE
ステートメントに指定されていない場合、データベースのキャラクタセットと照合順序はデフォルト値として使用されます。これらに他の用途はありません。
デフォルトのデータベースに対するキャラクタセットと照合順序は、character_set_database
およびcollation_database
のシステム変数値によって決定されます。デフォルトのデータベースが変わるたびに、サーバはこれらの変数を設定します。デフォルトのデータベースがない場合、変数は、character_set_server
およびcollation_server
といったサーバレベルのシステム変数と同値になります。
各テーブルにはテーブルキャラクタセットとテーブル照合順序があります。CREATE
TABLE
およびALTER
TABLE
ステートメントには、テーブルのキャラクタセットと照合順序を指定するためのオプション節があります。
CREATE TABLEtbl_name
(column_list
) [[DEFAULT] CHARACTER SETcharset_name
] [COLLATEcollation_name
]] ALTER TABLEtbl_name
[[DEFAULT] CHARACTER SETcharset_name
] [COLLATEcollation_name
]
例:
CREATE TABLE t1 ( ... ) CHARACTER SET latin1 COLLATE latin1_danish_ci;
MySQL では、テーブルキャラクタセットとテーブル照合順序が次のように選択されます。
CHARACTER SET
とX
COLLATE
の両方を指定した場合は、キャラクタセットY
X
と照合順序Y
。
CHARACTER SET
を指定し、X
COLLATE
を指定しなかった場合は、キャラクタセットX
とそのデフォルト照合順序。
COLLATE
を指定し、Y
CHARACTER
SET
を指定しなかった場合は、Y
関連のキャラクタセットと照合順序Y
。
その他の場合は、データベースキャラクタセットとデータベース照合順序。
カラムのキャラクタセットと照合順序が個別のカラム定義に指定されていない場合、テーブルのキャラクタセットと照合順序はデフォルト値として使用されます。テーブルのキャラクタセットと照合順序は MySQL 拡張であり、同等の機能は標準 SQL に存在しません。
各「文字」(CHAR
、VARCHAR
またはTEXT
型)にはカラムキャラクタセットとカラム照合順序があります。カラム定義構文には、カラムキャラクタセットとカラム照合順序を指定するためのオプション節があります。
col_name
{CHAR | VARCHAR | TEXT} (col_length
) [CHARACTER SETcharset_name
] [COLLATEcollation_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
とそのデフォルト照合順序。
COLLATE
を指定し、Y
CHARACTER
SET
を指定しなかった場合は、Y
関連のキャラクタセットと照合順序Y
。
その他の場合は、テーブルキャラクタセットとテーブル照合順序。
CHARACTER
SET
およびCOLLATE
節は標準SQLです。
各文字列リテラルにはキャラクタセットと照合順序があります。
文字列リテラルでは、オプションとしてキャラクタセットイントロデューサとCOLLATE
節を指定することができます。
[_charset_name
]'string
' [COLLATEcollation_name
]
例:
SELECT 'string
'; SELECT _latin1'string
'; SELECT _latin1'string
' COLLATE latin1_danish_ci;
単純なステートメントSELECT
'
に対して、文字列にはstring
'character_set_connection
およびcollation_connection
システム変数で定義されたキャラクタセットと照合順序が存在します。
_
は形式上イントロデューサと呼ばれています。指定すると、「キャラクタセットcharset_name
X
の文字列が後続する」ことがパーサに通知されます。上記はユーザの混乱を招いていたため、ここで強調しておきますが、イントロデューサは変換の原因にはならず、文字列の値が変更されないことを示すにすぎません。標準的な16進リテラルおよび数値16進リテラルの表記(x'
およびliteral
'0x
)の前でも、イントロデューサは有効です。
nnnn
例:
SELECT _latin1 x'AABBCC'; SELECT _latin1 0xAABBCC;
MySQLでは、リテラルのキャラクタセットおよび照合順序が次のように決定されます。
_X
とCOLLATE
の両方が指定された場合、リテラルキャラクタセットはY
X
、リテラル照合順序はY
。
_X
は指定されており、COLLATE
が指定されていない場合、リテラルキャラクタセットはX
、リテラル照合順序はそのデフォルト照合順序。
その他の場合は、character_set_connection
およびcollation_connection
システム変数が指定するリテラルキャラクタセットとリテラル照合順序。
例:
文字列にlatin1
キャラクタセットとlatin1_german1_ci
照合順序が指定されている場合
SELECT _latin1'Muller' COLLATE latin1_german1_ci;
文字列にlatin1
キャラクタセットとそのデフォルト照合順序(latin1_swedish_ci
)が指定されている場合
SELECT _latin1'Muller';
文字列に接続デフォルトキャラクタセットおよび照合順序が指定されている場合
SELECT 'Muller';
キャラクタセットイントロデューサとCOLLATE
節は、標準SQLの指定に基づいて提供されています。
イントロデューサは後続の文字列に対してキャラクタセットを指定しますが、現在のところ、その文字列におけるパーサのエスケーププロセス内容までは変更しません。エスケープは常に、character_set_connection
に指定されたキャラクタセットに従ってパーサが実行します。
以下の例は、イントロデューサが存在してもcharacter_set_connection
によるエスケーププロセスが生じる場合についてです。例ではSET
NAMES
(character_set_connection
を変更する項9.4. 「接続のキャラクタセットおよび照合順序」),
を用いてHEX()
ファンクションを使い結果文字列を表示させることで、正確文字列の内容を確認することができます。.
例1:
mysql>SET NAMES latin1;
Query OK, 0 rows affected (0.01 sec) mysql>SELECT HEX('a\n'), HEX(_sjis'a\n');
+------------+-----------------+ | HEX('a\n') | HEX(_sjis'a\n') | +------------+-----------------+ | E00A | E00A | +------------+-----------------+ 1 row in set (0.00 sec)
ここでは ‘a
’
(16進E0
)
の後に‘\n
’ニューラインのエスケープシーケンスが続きます。エスケープシーケンスはcharacter_set_connection
latin1
の値を使い、新しいリテラルニューラインを作成します。(16進
0A
)。これは2番目の文字列にも起こります。つまり、_sjis
のイントロデューサはパーサのエスケーププロセスに影響を及ぼしません。
例2:
mysql>SET NAMES sjis;
Query OK, 0 rows affected (0.00 sec) mysql>SELECT HEX('a\n'), HEX(_latin1'a\n');
+------------+-------------------+ | HEX('a\n') | HEX(_latin1'a\n') | +------------+-------------------+ | E05C6E | E05C6E | +------------+-------------------+ 1 row in set (0.04 sec)
ここでは character_set_connection
は
sjis
になります。このキャラクタセットは次のシーケンス‘a
’
と‘\
’ (hex values
05
and 5C
)がつづく、
有効なマルチバイトキャラクタです。よって、文字列の最初の2バイトは1つのsjis
キャラクタとして実行され、‘\
’
はエスケープキャラクタとし実行されない。次の‘n
’
(16進値6E
)
はエスケープシーケンスの一部として実行されません。これは第2文字列にとっても同様に、_latin1
のイントロデューサはエスケーププロセッシングに影響しません。
標準SQL
ではNCHAR
またはNATIONAL
CHAR
が、事前定義キャラクタセットがCHAR
カラムで使用されるように指定する方法のひとつとして使われています。MySQLでは5.1utf8
事前定義キャラクタセットとして使用されます。例えば、以下のデータタイプ宣言は等価です:
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
'
SELECT N'some text'; SELECT _utf8'some text';
バージョン4.1以前のMySQLにキャラクタセットをアップグレードするには、5.1 MySQL 3.23, 4.0, 4.1 リファレンスマニュアルを参照してください。.
MySQL でデフォルトのキャラクタセットと照合順序の値がどのように決定されるかを、以下の例で示します。
例1テーブルとカラム定義
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
テーブルになっていることに問題はありません。
例2テーブルとカラム定義
CREATE TABLE t1 ( c1 CHAR(10) CHARACTER SET latin1 ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
ここでは、latin1
キャラクタセットとデフォルトしょうごうじゅんじょがカラムに指定されています。自然な指定に目増すが、デフォルト照合順序はテーブルレベルから取り込まれません。latin1
のデフォルト照合順序は常にlatin1_swedish_ci
です。したがって、カラムc1
にはlatin1_swedish_ci
の照合順序ではなく、latin1_danish_ci
の照合順序が設定されます。
例3テーブルとカラム定義
CREATE TABLE t1 ( c1 CHAR(10) ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
ここでは、デフォルトキャラクタセットとデフォルト照合順序がカラムに指定されています。この場合に
MySQL
では、テーブルレベルまで検索してカラムのキャラクタセットと照合順序が決定されます。したがって、カラム
c1
のキャラクタセットはlatin1
、照合順序はlatin1_danish_ci
となります。.
例4データベース、テーブル+カラム定義
CREATE DATABASE d1 DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci; USE d1; CREATE TABLE t1 ( c1 CHAR(10) );
キャラクタセットと照合順序を指定せずにカラムを作成します。テーブルレベルのキャラクタセットと照合順序も指定しません。この場合に
MySQLでは、データベースレベルまでさかのぼって処理が決定されます。(データベースの設定はテーブルの設定になり、そしてカラムの設定になります。)したがって、カラム
c1
のキャラクタセットはlatin1
、照合順序はlatin1_czech_ci
となります。
複数のキャラクタセットとシステム変数はサーバとクライアント間の通信に関係しています。いくつかは前セクションですでに説明されています。
サーバキャラクタセットと照合順序は、character_set_server
およびcollation_server
のシステム変数値で決定されます。
デフォルトのデータベースに対するキャラクタセットと照合順序は、character_set_database
およびcollation_database
のシステム変数値によって決定されます。
追加キャラクタセットと照合順序システム変数がクライアント・サーバー間のコネクショントラフィックを統括する役目を担っています。どのクライアントもコネクション関係のキャラクタセットと照合順序システム変数を持っています。
「”接続”」 とはなんでしょう。”接続”とは、サーバへの接続時に作成されるものです。クライアントは接続を介し、SQL ステートメント(クエリなど)をサーバに送信します。サーバでは接続を介し、応答(結果セットなど)をクライアントに返します。 これによって、次のような、クライアントの接続についてキャラクタセットと照合順序疑に関する問が生じます。これら疑問に関する答えはシステム変数値によって導き出されます。
クライアントから送信される際にステートメントはどのキャラクタセットで送られるのか。
サーバは
character_set_client
システム変数値をそのままクライアントの送るステートメントのキャラクタセットにします。
サーバではクエリを受信した後にどのキャラクタセットに変換するのか。
これには、サーバは
character_set_connection
とcollation_connection
のシステム変数値を使用します。
クライアントから送られたステートメントをcharacter_set_client
からcharacter_set_connection
に変換します(ただし_latin1
あるいは_utf8
のようなイントロデューサのある文字列リテラルは除く).
collation_connection
はリテラル文字列の比較にとって重要です。カラム値のある文字列の比較には、collation_connection
は重要視されません。なぜならカラムには自身の照合順序があり、優先的にこれらの照合順序を参照するからです。
サーバでは結果セットまたはエラーメッセージをクライアントに返送する前にどのキャラクタセットに変換するのか。
character_set_results
の
システム変数値はサーバがどのキャラクタセットでクライアントにクエリ結果を返信するかを指定しています。これはカラム値やメタデータ結果に含まれるカラム名などの結果データを含みます。
これらは細かく調整することができますが、デフォルトを適用することもできます。デフォルトを適用する場合、このセクションをとばしてかまいません。
接続キャラクタセットに影響するステートメントが 2 つ存在します。
SET NAMES 'charset_name
' SET CHARACTER SETcharset_name
SET
NAMES
は、クライアントから送信される SQL
ステートメントのキャラクタセットを示します。たとえば、SET
NAMES 'cp1251'
は
「「このクライアントからの入力メッセージは今後、キャラクタセット
cp1251
.になります」」
とサーバに通知します。加えて、クライアントに結果を返信する際サーバーが使用するべきキャラクタセットも指定します。(例えば、SELECT
ステートメントを使った場合どのカラム値に対してどのキャラクタセットを使用したらいいか指定します。)
SET NAMES
'
ステートメントは下記の3ステートメントと等価です。
x
'
SET character_set_client =x
; SET character_set_results =x
; SET character_set_connection =x
;
character_set_connection
をx
にセットするとcollation_connection
も
x
のデフォルト照合順序にセットされます。その照合順序を正確にセットする必要はありません。キャラクタセットに特定の照合順序を指定するには、オプションのCOLLATE
節を使用してください。
SET NAMES 'charset_name
' COLLATE 'collation_name
'
SET CHARACTER SET
はSET
NAMES
に似ていますがcharacter_set_connection
とcollation_connection
をcharacter_set_database
とcollation_database
にセットします。SET
CHARACTER SET
ステートメントは下記の3ステートメントと等価です。
x
SET character_set_client =x
; SET character_set_results =x
; SET collation_connection = @@collation_database;
collation_connection
を指定するとcharacter_set_connection
も照合順序に関係するキャラクタセットに指定されます(SET
character_set_connection =
@@character_set_database
を実行することと同様)。character_set_connection
を正確に指定する必要はありません。
クライアント接続時、使用したいキャラクタセット名がサーバーに送られます。サーバはこのキャラクタセット名を使ってcharacter_set_client
、character_set_results
、そしてcharacter_set_connection
のシステム変数値を指定します。結果的に、サーバはキャラクタセット名を使用してSET
NAMES
オペレーションを実行します。
デフォルト以外のキャラクタセットを使用したい場合、mysql
クライアントでは、起動するたびに SET
NAMES
を実行する必要はありません。--default-character-set
オプション設定をmysqlステートメントラインか、オプションファイルに追加することができます。たとえば、以下のオプション設定ファイルの設定では、mysql:を実行する度に、三つのキャラクタセット変数値をkoi8r
に変更します。
[mysql] default-character-set=koi8r
もしmysqlクライアントの自動再接続(推奨されていません)を使用しているのであれば、SET
NAMES
よりもcharset
を使用することをお勧めします。例:
mysql> charset utf8
Charset changed
charset
コマンドはSET
NAMES
ステートメントを発行し、mysql
接続が解除され再接続された場合に使用されているデフォルトキャラクタセットも変更します。
例:例えばcolumn1
がCHAR(5)
CHARACTER SET
latin2
として定義されていたとします。もしSET
NAMES
あるいはSET CHARACTER
SET
ではない場合、SELECT column1 FROM
t
に関してサーバはcolumn1
の値を、接続時にクライアントが指定したすべての値を返信します。逆にSET
NAMES 'latin1'
あるいはSET
CHARACTER SET
latin1
をSELECT
ステートメントを発行する前に使用した場合,サーバーは結果を返信する前にlatin2
の値をlatin1
に変換します。.そのような変換は低速であり、損失につながることもあります。
サーバに結果セットの変換を実行をしてほしくない場合は、character_set_results
をNULL
に指定してください。
SET character_set_results = NULL;
注:現在、UCS-2
クライアントのキャラクタセットとして使用ができません。これはSET
NAMES
'ucs2'
が使用できないことを意味します。
コネクションに関係するキャラクタセットや照合順序システム変数値を参照するには、下記のステートメントを使用してください。
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
下記のセクションではキャラクタセットの照合順序に関する事項を紹介します。
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 'Muller' COLLATE latin1_german2_ci = k;
SELECT * FROM t1 WHERE k LIKE _latin1 'Muller' COLLATE latin1_german2_ci;
HAVING
を指定した場合
SELECT k FROM t1 GROUP BY k HAVING k = _latin1 'Muller' COLLATE latin1_german2_ci;
COLLATE
節は優先順位が高いため(||
よりも高い)、下記の2つの式は等価となります。
x || y COLLATE z x || (y COLLATE z)
BINARY
オペレータは2進性の文字列に続く文字列を送信します。キャラクタ毎よりも、バイト毎の比較を強制的に行う簡単な方法です。BINARY
は後続のスペースにも重要な意味を持たせます。
mysql>SELECT 'a' = 'A';
-> 1 mysql>SELECT BINARY 'a' = 'A';
-> 0 mysql>SELECT 'a' = 'a ';
-> 1 mysql>SELECT BINARY 'a' = 'a ';
-> 0
BINARY
はstr
CAST(
の略でもあります。
str
AS BINARY)
キャラクタカラム定義のBINARY
性質は別の効果があります。BINARY
性質で定義されたキャラクタカラムはカラムのキャラクタセットの二進節を割り当てられます。全てのキャラクタセットに二進節があります。例えば、latin1
キャラクタセットの二進節はlatin1_bin
です。よってデフォルトキャラクタセットがlatin1
の場合、下記の2カラムの定義は等価になります。
CHAR(10) BINARY CHAR(10) CHARACTER SET latin1 COLLATE latin1_bin
BINARY
のカラム性質としての効果はMySQL4.1.の時のそれと効果に違いがあります。以前、BINARY
は結果二進文字列として扱われたカラムになりました。二進文字列は、キャラクタセットや照合順序のないバイトの列で、二進照合順序のある非二審キャラクタ文字列とは違います。両文字列にとって、比較は文字列のユニットの数値をもって行われます。しかし非二審文字列にとってはユニットはキャラクタであり、キャラクタセットの中にはマルチバイトキャラクタを許容しているものもあります。
項10.4.2. 「BINARY
と VARBINARY
タイプ」.
CHARACTER SET
binary
のCHAR
、VARCHAR
あるいはTEXT
カラム定義での使用は二進性のデータタイプとしてカラムを扱うことになります。例えば、下記の定義は等価です
CHAR(10) CHARACTER SET binary BINARY(10) VARCHAR(10) CHARACTER SET binary VARBINARY(10) TEXT CHARACTER SET binary BLOB
大多数のクエリでは、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
節の優先順位は0です。(優先されません)
照合順序の異なる文字列 2 つの連結は優先順位が 1。
カラムの照合順序、保存されたルーチンパラメータ、もしくはローカル変数値は優先順位が 2。
「システム定数」 (USER()
またはVERSION()
といったファンクションに返される文字列)
の優先順位は3。
リテラルの照合順序は優先順位が4 。
NULL
もしくはNULL
由来の表現の優先順位は5。
先行する優先順位の値は現MySQLのものである。5.1
これらのルールによって、あいまいさは次のように解消されます。
優先順位が最も低い照合順序を使用する。
双方の優先順位が一致する場合、照合順序が一致しないとエラーとなる。
例:
column1 = 'A' | column1 使用する照合順序 |
column1 = 'A' COLLATE x | 'A' COLLATE x 使用する照合順序 |
column1 COLLATE x = 'A' COLLATE y | エラー |
COERCIBILITY()
ファンクションで文字列表現の優先順位が決定できます。
mysql>SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);
-> 0 mysql>SELECT COERCIBILITY(VERSION());
-> 3 mysql>SELECT COERCIBILITY('A');
-> 4
詳しくはこちらをを参照してください。項11.10.3. 「情報関数」
各キャラクタセットには 1
つ以上の照合順序があり、各照合順序は 1
つのキャラクタセットに関連付けられていることを思い出してください。したがって、次のステートメントはエラーになります。latin2_bin
照合順序は
latin1
キャラクタセットに対して有効でないからです。
mysql> SELECT _latin1 'x' COLLATE latin2_bin;
ERROR 1253 (42000): COLLATION 'latin2_bin' is not valid
for CHARACTER SET 'latin1'
テーブル T
のカラム
X
に以下のlatin1
カラムの値が設定されているとします。
Muffler Muller MX Systems MySQL
さらに、以下のステートメントを使用してカラムの値を取得したとします。
SELECT X FROM T ORDER BY X COLLATE collation_name
;
この表は、複数の異なった照合順序を
ORDER
BY
節で使用した結果の一例です。
latin1_swedish_ci | latin1_german1_ci | latin1_german2_ci |
Muffler | Muffler | Muller |
MX Systems | Muller | Muffler |
Muller | MX Systems | MX Systems |
MySQL | MySQL | MySQL |
例では、2 個の点が上に付いている U
が問題の原因です(u
)。この文字をドイツでは「ウムラウト」と呼んでいますが、私たちは分音記号付きの
U と呼んでいます。
最初のカラムには、スウェーデン語/フィンランド語の照合ルールを使用したSELECT
の結果が示されています。この照合ルールによると、分音記号付きの
U は Y と一致します。
最初のカラムには、スウェーデン語/フィンランド語の照合ルールを使用したSELECT
の結果が示されています。この照合ルールによると、分音記号付きの
U は Y と一致します。
最初のカラムには、スウェーデン語/フィンランド語の照合ルールを使用したSELECT
の結果が示されています。この照合ルールによると、分音記号付きの
U は Y と一致します。
このセクションでは、キャラクタセット情報を計算に入れる演算について説明します。
MySQL には、文字列を返す多数の演算子と関数があります。このセクションでは。そのような文字列のキャラクタセットと照合順序について解説しています。
文字列の入力を取得して文字列の結果を出力として返す単純な関数では、出力のキャラクタセットおよび照合順序は主要な入力のキャラクタセットおよび照合順序と同じです。たとえば
UPPER(
は、キャラクタセットおよび照合が
X
)X
と一致する文字列を返します。同じことはいかについても当てはまります。INSTR()
、
LCASE()
、LOWER()
、
LTRIM()
、MID()
、
REPEAT()
、 REPLACE()
、
REVERSE()
、 RIGHT()
、
RPAD()
、
RTRIM()
、SOUNDEX()
、
SUBSTRING()
、TRIM()
、
UCASE()
そして
UPPER()
。
注:REPLACE()
関数は他のすべての関数とは異なり、文字列入力の照合順序を無視し、大文字と小文字が区別される比較を毎回実行します。
入力文字列あるいはファンクションの結果がバイナリ文字列の場合、キャラクタセットあるいは照合順序に対する文字列はありません。これはCHARSET()
とCOLLATION()
ファンクションを使ってチェックすることができます。両ファンクションとも、引数がバイナリ文字列であると明示するためbinary
を返します。
mysql> SELECT CHARSET(BINARY 'a'), COLLATION(BINARY 'a');
+---------------------+-----------------------+
| CHARSET(BINARY 'a') | COLLATION(BINARY 'a') |
+---------------------+-----------------------+
| binary | binary |
+---------------------+-----------------------+
複数の文字列入力を組み合わせて単一の文字列出力を返す操作には、標準SQLの「集約ルール」が適用されます。
明示的なCOLLATE
存在する場合はX
X
を使用する。
明示的な COLLATE
とX
COLLATE
が存在する場合はエラーになる。
Y
上記以外の場合で全ての照合順序がX
であるときはX
を使用する。
その他の場合、結果に照合順序は含まれない。
例えば、CASE ... WHEN a THEN b WHEN b THEN c
COLLATE
と指定されている場合、結果照合順序は
X
ENDX
になります。同じことは以下についても当てはまりますUNION
、||
、CONCAT()
、ELT()
、GREATEST()
、IF()
、LEAST()
。
文字データを変換する操作のため、結果文字列のキャラクタセットと照合順序はcharacter_set_connection
とcollation_connection
システム変数値によって定義されています。.このことは以下についてのみ当てはまります。CAST()
、CONV()
、FORMAT()
、HEX()
、SPACE()
。
もし文字列ファンクションに返された結果のキャラクタセットや照合順序にたいして不明の場合、確かめるためにCHARSET()
またはCOLLATE()
ファンクションを使用してください。
mysql> SELECT USER(), CHARSET(USER()), COLLATION(USER());
+----------------+-----------------+-------------------+
| USER() | CHARSET(USER()) | COLLATION(USER()) |
+----------------+-----------------+-------------------+
| test@localhost | utf8 | utf8_general_ci |
+----------------+-----------------+-------------------+
CONVERT()
を使用すると、異なるキャラクタセット間でデータを変換することができます。構文は以下のとおりです。
CONVERT(expr
USINGtranscoding_name
)
MySQL では、トランスコーディング名は対応するキャラクタセット名と同じです。
例:
SELECT CONVERT(_latin1'Muller' USING utf8); INSERT INTO utf8table (utf8column) SELECT CONVERT(latin1field USING utf8) FROM latin1table;
CONVERT(... USING ...)
は、標準SQLの仕様に基づき実装されています。
CAST()
を使用し、文字列を別のキャラクタセットに変換することもできます。構文は以下のとおりです。
CAST(character_string
AScharacter_data_type
CHARACTER SETcharset_name
)
例:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);
CAST()
woCHARACTER
SET
の指定なしで使用した場合、キャラクタセットと照合順序はcharacter_set_connection
とcollation_connection
のシステム変数で定義されます。CAST()
をCHARACTER
SET
X
の指定ありで使用した場合、キャラクタセットはX
、照合順序はX
のデフォルト照合順序になります。
COLLATE
節をCAST()
の内部で使用することはできませんが外部では使用することができます。したがってCAST(...
COLLATE ...)
無効ですが、CAST(...)
COLLATE ...
は有効です。
例:
SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
複数のSHOW
ステートメントからキャラクタセットの追加情報が得られます。これらの中にはSHOW
CHARACTER SET
、SHOW
COLLATION
、SHOW CREATE DATABASE
、
SHOW CREATE TABLE
そしてSHOW
COLUMNS
が含まれます。これらのステートメントを以下に簡単に挙げます。
さらに詳しい情報が必要な場合は、次を参照してください項12.5.4. 「SHOW
構文」。
INFORMATION_SCHEMA
にはSHOW
ステートメントで表示される情報に類似した複数のテーブルが含まれます。例えば、CHARACTER_SETS
およびCOLLATIONS
テーブルはSHOW CHARACTER
SET
およびSHOW
COLLATION
で表示される情報を含みます。
章?21. INFORMATION_SCHEMA
データベース.
SHOW CHARACTER
SET
コマンドは全ての有効なキャラクタセットを示します。どのキャラクタセット名を整合させるかはオプションのLIKE
節が使用されます。例:
mysql> SHOW CHARACTER SET LIKE 'latin%';
+---------+-----------------------------+-------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+-----------------------------+-------------------+--------+
| latin1 | cp1252 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 |
+---------+-----------------------------+-------------------+--------+
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 |
| latin1_spanish_ci | latin1 | 94 | | | 0 |
+-------------------+---------+----+---------+----------+---------+
SHOW CREATE
DATABASE
は指定されたデータベースを作成するCREATE
DATABASE
ステートメントを示します。
mysql> SHOW CREATE DATABASE test;
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+
COLLATE
節が表示されていなければキャラクタセットのデフォルト照合順序が適用されます。
SHOW CREATE TABLE
は類似していますが、CREATE
TABLE
既存のテーブルを作成するためのステートメントを表示します。カラム定義はキャラクタセット仕様を指定し、テーブルオプションはキャラクタセット情報を含んでいます。
SHOW
COLUMNS
ステートメントはSHOW FULL
COLUMNS
として実行された場合、テーブルカラムの照合順序を表示します。CHAR
、VARCHAR
、またはTEXT
データ型を含むカラムには照合順序があります。ニューメリックと他の文字列の存在しない型には照合順序がありません(Collation
値としてNULL
で表示されます)。例:
mysql> SHOW FULL COLUMNS FROM person\G
*************************** 1. row ***************************
Field: id
Type: smallint(5) unsigned
Collation: NULL
Null: NO
Key: PRI
Default: NULL
Extra: auto_increment
Privileges: select,insert,update,references
Comment:
*************************** 2. row ***************************
Field: name
Type: char(60)
Collation: latin1_swedish_ci
Null: NO
Key:
Default:
Extra:
Privileges: select,insert,update,references
Comment:
キャラクタセットは表示の一部ではなく照合順序名で示されます。
MySQL 5.1Unicode データを保存するために次の二つのキャラクタセットが用意されています
ucs2
( the UCS-2
Unicode キャラクタセット)
utf8
(Unicode キャラクタセットのUTF-8 エンコード)
UCS-2(Unicode のバイナリ表現)では、各文字は 2
バイトの Unicode
と最上位のバイトで最初に表現されます。例:LATIN
CAPITAL LETTER A
はコード0x0041
で、2バイトシーケンスで保存されます。0x00
0x41
。CYRILLIC SMALL LETTER YERU
(Unicode0x044B
)
は2バイトシーケンスとして保存されます。0x00
0x41
。Unicode
文字および対応するコードについては、Unicode
Home Pageを参照してください。
現在、UCS-2はクライアントキャラクタセットとして使用ができません。これはSET
NAMES
'ucs2'
が使用できないことを意味します。
UTF-UTF8 キャラクタセット(Unicode 表現の変換)は、Unicode データを保存する別の方法です。RFC3629 に基づき実装されています。さまざまな Unicode 文字を長さの異なるバイトシーケンスに適合させることが、UTF8 キャラクタセットの概念です。
基本的なラテン文字、数字、句読点は 1 バイトを使用します。
ヨーロッパおよび中東のスクリプト文字の多くは、2 バイトシーケンスに適合します。拡張ラテン文字(チルダ、長音、鋭アクセント、抑音アクセントその他のアクセント付き)、キリル文字、ギリシア文字、アルメニア文字、ヘブライ文字、アラビア文字、シリア文字その他。
韓国語、中国語、日本語の表意文字は、3 バイトシーケンスを使用します。
RFC 3629 は1から4バイトまでのエンコードシーケンスを示します。現在、MySQLではUTF-8に対して4バイトシーケンスのサポートは含みません。(UTF-8 エンコードの旧標準はRFC 2279で提供されています。これは1から6バイトのUTF-8シーケンスを示しています。RFC 3629 はRFC 2279 を無効にします。このため、5と6バイトのシーケンスはすでに使用されていません。
ヒント:スペースを UTF8
で保存するには、VARCHAR
ではなく
CHAR
を使用してください。そのようにしないと、MySQL
では CHAR CHARACTER SET
utf8
カラムに対して
3バイトを確保しなければなりません。これは、使用可能な最大長が
3バイトであるためです。
たとえば、MySQLはCHAR(10) CHARACTER SET
utf8
カラムに対して30バイトを確保しなければなりません。
メタデータとは「データについてのデータです。」データベース?の内容となっているデータではなく、データベース?について説明するデータがメタデータです。
したがって、カラム名、データベース名、ユーザ名、バージョン名のほか、SHOW
を実行して表示される文字列の多くがメタデータに該当します。
INFORMATION_SCHEMA
のテーブルコンテンツに関しても同様です。というのも、それらのテーブルにはデータベースオブジェクトに関する情報が含まれることが定義されているからです。
メタデータの表現は下記の要求を満たしていなければなりません。
すべてのメタデータはキャラクタセットが一致している必要があります。そうなっていない場合、SHOW
コマンドやINFORMATION_SCHEMA
のテーブルSELECT
ステートメントは正確には働きません。
なぜなら、これらの同じ演算結果カラムの文字列は、異なるキャラクタセットに存在するからです。
メタデータは全ての言語の全ての文字を含んでいる必要があります。そうなっていない場合、ユーザは各々の言語を使用してカラムとテーブルに名前をつけることはできません。
上記 2 つの要求を満たすために、MySQL ではメタデータが Unicode キャラクタセット(UTF8)で保存されます。これによって不具合が発生しないのは、アクセント付き文字を使用しない場合です。使用する場合、メタデータのキャラクタセットが UTF8 であることを認識する必要があります。
メタデータ要求は、USER()
、CURRENT_USER()
、SESSION_USER()
、SYSTEM_USER()
、DATABASE()
、そしてVERSION()
関数では、UTF-8キャラクターセットがデフォルトで使用されることを意味します。
サーバではcharacter_set_system
のシステム変数がメタデータキャラクタセットに名前をつけることができます。
mysql> SHOW VARIABLES LIKE 'character_set_system';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_system | utf8 |
+----------------------+-------+
Unicodeを用いたメタデータの保存は、サーバが、カラムのヘッダーやデフォルトのcharacter_set_system
キャラクタセット内の結果DESCRIBE
関数を返すということではありません。SELECT
column1 FROM
t
を使用すると、column1
の名前がそのままサーバから、character_set_results
システム変数値によって定義されるキャラクタセット(latin1
のデフォルト値)のクライアントに返されます。異なるキャラクタセットでメタデータ結果をサーバから返してほしいときは、SET
NAMES
ステートメントを使用してキャラクタセット変換を強制的に実行させましょう。SET
NAMES
はcharacter_set_results
と他の関連システム変数を設定します。(詳しくは項9.4. 「接続のキャラクタセットおよび照合順序」をご確認ください。)また、サーバから結果を受け取った後、クライアントプログラムが変換を実行することができます。クライアントが変換を実行するほうが効率的ですが、常にクライアントにオプション選択ができるわけではありません。
character_set_results
がNULL
に設定されている場合、変換は実行されず、サーバはオリジナルのキャラクタセットを使用してメタデータを返します。(設定はcharacter_set_system
によって指定されます。
サーバからクライアントへのエラーメッセージは、自動的にメタデータとしてクライアントのキャラクタセットに変換されます。
たとえばUSER()
たとえば、USER()
関数を比較または割当のために単一のステートメントで使用しているとします。
MySQL には自動変換機能が用意されています。
SELECT * FROM Table1 WHERE USER() = latin1_column;
この機能が有効なのは、latin1_column
の内容が
UTF8
へと自動的に変換されてから比較が行われるからです。
INSERT INTO Table1 (latin1_column) SELECT USER();
この機能が有効なのは、USER()
の内容が
latin1
へと自動的に変換されてから割り当てが行われるからです。自動変換機能は完全には実装されていませんが、将来のバージョンでは適切に動作する予定です。
自動変換機能は SQL 標準に含まれていません。ただし、どのキャラクタセットも(サポートされている文字に関して)Unicode の 「subset」であることが SQL 標準の文書に記載されています。「「スーパーセットに適用されるものはサブセットにも適用される」」という有名な原則があるので、Unicode の照合順序は Unicode 以外の文字列との比較にも適用できると考えられます。
特定のキャラクタセット使用のため、バイナリもしくはバイナリではない文字列カラムの変換にはALTER
TABLE
を使用してください。正確な変換のためには、以下の条件の内一つが適用されなければなりません。
カラムがバイナリデータ型(BINARY
、VARBINARY
、BLOB
)である場合、含まれる全ての値は1つのキャラクタセット(カラムを変換しようとしているキャラクタセット)を使ってエンコードされている必要があります。バイナリカラムを使って複数のキャラクタセット情報を保存する場合、MySQLはどの値がどのキャラクタセットを使用するのか特定できず、データを正確に変換できません。
カラムにバイナリではないデータ型(CHAR
、VARCHAR
、TEXT
)が存在する場合、内容は他のキャラクタセットではなく、カラムのキャラクタセットでエンコードされている必要があります。内容が他のキャラクタセットでエンコードされている場合、先にバイナリデータ型を使用するようカラムを変換して、望ましいキャラクタセットのバイナリでないカラムに変換することができます。
例えばテーブルt
がBINARY(50)
として定義されているcol1
というバイナリカラムだとします。カラムに含まれる情報が1つのキャラクタセットを使用してエンコードされていると想定して、キャラクタセットを持つバイナリでないカラムに変換することができます。例えば、col1
にはgreek
の文字を表すキャラクタセットのバイナリデータが含まれる場合、以下のように変換できます。
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET greek;
例えばそのテーブルt
はcol1
というCHAR(50)
CHARACTER SET
latin1
と定義された、バイナリでないカラムを含むとします。utf8
を使用し多言語からの値を保存するために変換したいとします。以下のステートメントはこれを実行します。
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
カラムに、両キャラクタセットに含まれない文字がある場合、変換は正確に実行されません。
4.0もしくはそれ以前のバージョンから古いテーブルを使用する場合、特定のケースが生じます。ここでは、バイナリでないカラムは、サーバのデフォルトキャラクタセットと異なるキャラクタセットでエンコードされた値を含みます。例えば、MySQLのデフォルトキャラクタセットがlatin1
であっても、アプリケーションはsjis
値をカラムに保存します。適切なキャラクタセットを使用するために、カラムを変換することは可能ですが、追加ステップが必要となります。例えばサーバのデフォルトキャラクタセットがlatin1
でcol1
はCHAR(50)
と定義されているにもかかわらず、内容はsjis
値とします。最初のステップは、バイナリデータ型にカラムを変換することで、既存のキャラクタセット情報を文字変換なしで取り除くことです。
ALTER TABLE t MODIFY col1 BINARY(50);
次のステップは適切なキャラクタセットを用いたバイナリでないデータ型にカラムを変換することです。:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET sjis;
このプロシージャは、MySQL4.1もしくはそれ以降にアップグレード後、テーブルがINSERT
やUPDATE
のようなステートメントで修正されていないことが求められます。
その場合、MySQL
はlatin1
を使い新しい値を保存し、カラムはsjis
とlatin1
値を同時に含んでおり、正確に変換することはできません。
最初にカラムを作成するときに属性を特定した場合、ALTER
TABLE
を使ってテーブルを変更しているときも属性を特定する必要があります。例えばNOT
NULL
と明示的なDEFAULT
値を特定した場合、ALTER
TABLE
ステートメントでも特定する必要があります。でなければ、結果のカラム定義にはそれらの属性が含まれません。
MySQL では、30 を超えるキャラクタセットに対して 70 を超える照合順序がサポートされています。このセクションではMySQLがどのキャラクタセットをサポートするかを示しています。関連するキャラクタセットごとに、1つのサブセクションがあります。各キャラクタセットに対して有効な照合順序がリストアップされています。
SHOW CHARACTER SET
ステートメントを用いて、有効なキャラクタセットとそのデフォルトの照合順序を常に表示することができます。
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+
| Charset | Description | Default collation |
+----------+-----------------------------+---------------------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci |
| dec8 | DEC West European | dec8_swedish_ci |
| cp850 | DOS West European | cp850_general_ci |
| hp8 | HP West European | hp8_english_ci |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci |
| latin1 | cp1252 West European | latin1_swedish_ci |
| latin2 | ISO 8859-2 Central European | latin2_general_ci |
| swe7 | 7bit Swedish | swe7_swedish_ci |
| ascii | US ASCII | ascii_general_ci |
| ujis | EUC-JP Japanese | ujis_japanese_ci |
| sjis | Shift-JIS Japanese | sjis_japanese_ci |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci |
| tis620 | TIS620 Thai | tis620_thai_ci |
| euckr | EUC-KR Korean | euckr_korean_ci |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci |
| greek | ISO 8859-7 Greek | greek_general_ci |
| cp1250 | Windows Central European | cp1250_general_ci |
| gbk | GBK Simplified Chinese | gbk_chinese_ci |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci |
| utf8 | UTF-8 Unicode | utf8_general_ci |
| ucs2 | UCS-2 Unicode | ucs2_general_ci |
| cp866 | DOS Russian | cp866_general_ci |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci |
| macce | Mac Central European | macce_general_ci |
| macroman | Mac West European | macroman_general_ci |
| cp852 | DOS Central European | cp852_general_ci |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci |
| cp1251 | Windows Cyrillic | cp1251_general_ci |
| cp1256 | Windows Arabic | cp1256_general_ci |
| cp1257 | Windows Baltic | cp1257_general_ci |
| binary | Binary pseudo charset | binary |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci |
+----------+-----------------------------+---------------------+
MySQLにはキャラクタセットが 2 つ存在します。これらのキャラクタセットを使用し、約 650 の言語でテキストを保存することができます。
ucs2
(UCS-2 Unicode) 照合順序
ucs2_bin
ucs2_czech_ci
ucs2_danish_ci
ucs2_esperanto_ci
ucs2_estonian_ci
ucs2_general_ci
(デフォルト)
ucs2_hungarian_ci
ucs2_icelandic_ci
ucs2_latvian_ci
ucs2_lithuanian_ci
ucs2_persian_ci
ucs2_polish_ci
ucs2_roman_ci
ucs2_romanian_ci
ucs2_slovak_ci
ucs2_slovenian_ci
ucs2_spanish2_ci
ucs2_spanish_ci
ucs2_swedish_ci
ucs2_turkish_ci
ucs2_unicode_ci
utf8
(UCS-8 Unicode) 照合順序
utf8_bin
utf8_czech_ci
utf8_danish_ci
utf8_esperanto_ci
utf8_estonian_ci
utf8_general_ci
(デフォルト)
utf8_hungarian_ci
utf8_icelandic_ci
utf8_latvian_ci
utf8_lithuanian_ci
utf8_persian_ci
utf8_polish_ci
utf8_roman_ci
utf8_romanian_ci
utf8_slovak_ci
utf8_slovenian_ci
utf8_spanish2_ci
utf8_spanish_ci
utf8_swedish_ci
utf8_turkish_ci
utf8_unicode_ci
注:ucs2_roman_ci
とutf8_roman_ci
の照合順序では、I
とJ
およびU
とV
は等価として比較されます。
ucs2_hungarian_ci
とutf8_hungarian_ci
の照合順序はMySQL 5.1.5で追加されています。
MySQL
はutf8_unicode_ci
照合順序を、以下に示されるhttp://www.unicode.org/reports/tr10/Unicode
照合順序アルゴリズム(UCA)
によって実行されます。照合順序ではバージョン-4.0.0
UCAのウェイトキーが使用されます。http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt
以下ではutf8_unicode_ci
を使用しますが、ucs2_unicode_ci
に対しても有効です。
現在、utf8_unicode_ci
照合順序はUnicode
照合順序アルゴリズムを部分的にのみサポートしています。中にはまだサポートされていない文字もあります。また、結合マークは完全にはサポートされていません。このことはベトナム語を中心に、ロシア内のマイノリティ言語に影響します。
utf8_unicode_ci
主な特徴は、拡張をサポートしていることです。それは1つの文字が他の文字のコンビネーションと等価であると比較された場合です。例えば、ドイツ語や他の言語では、‘s
’
は‘ss
’に相当します。
utf8_general_ci
は拡張をサポートしないレガシー照合順序です。文字間で1対1の比較しかできません。つまり、utf8_general_ci
照合順序に対する比較の方が早いが、utf8_unicode_ci
に比べてわずかに正確性が劣ります。
例えば、以下の等式がutf8_general_ci
とutf8_unicode_ci
において証明されます。
A = A O = O U = U
照合順序間の違いはutf8_general_ci
に対して有効です。
s = s
utf8_unicode_ci
にとって有効である場合:
s = ss
MySQL
がutf8
キャラクタセットに対する特定言語の照合順序を実行するのはutf8_unicode_ci
内での順序が言語に対してうまく機能しないときだけです。
例えば、utf8_unicode_ci
はドイツ語とフランス語では正しく機能するので、これら2言語に対する特定のutf8
照合順序を作成する必要はありません。
utf8_general_ci
もドイツ語・フランス語ともに有効ですが、ただし‘s
’は‘s
’と等価であり、‘ss
’と等価ではありません。これが使用しているアプリケーションに対して可能な場合、utf8_general_ci
の方が早いのでこちらをお勧めします。それ以外の場合、utf8_unicode_ci
を使うほうがより正確です。
utf8_swedish_ci
は他のutf8
特定言語の照合順序のように、追加言語ルールとともにutf8_unicode_ci
から由来します。例えば、スウェーデン語ではドイツ語やフランス語を使用するユーザでは予期しないような以下の関係が有効です
U = Y < O
utf8_spanish_ci
とutf8_spanish2_ci
照合順序は現代スペイン語および従来のスペイン語に対しても同様に対応します。両照合順序において‘n
’
(n-tilde)は、
‘n
’や‘o
’とは区別すべき文字です。さらに従来のスペイン語では‘ch
’
は‘c
’と‘d
’は区別すべき文字であり、‘ll
’は‘l
’と‘m
’とも区別すべき文字です。
西ヨーロッパのキャラクタセットには、大部分の西ヨーロッパ言語(フランス語、スペイン語、カタロニア語、バスク語、ポルトガル語、イタリア語、アルバニア語、オランダ語、ドイツ語、デンマーク語、スウェーデン語、ノルウェー語、フィンランド語、フェロー語、アイスランド語、アイルランド語、スコットランド語、英語など)が含まれています。
ascii
(US ASCII) 照合順序:
ascii_bin
ascii_general_ci
(デフォルト)
cp850
(DOS 西ヨーロッパ言語)
照合順序:
cp850_bin
cp850_general_ci
(デフォルト)
dec8
(DEC 西ヨーロッパ言語)
照合順序:
dec8_bin
dec8_swedish_ci
(デフォルト)
hp8
(HP 西ヨーロッパ言語)
照合順序:
hp8_bin
hp8_english_ci
(デフォルト)
latin1
(cp1252 西ヨーロッパ言語)
照合順序:
latin1_bin
latin1_danish_ci
latin1_general_ci
latin1_general_cs
latin1_german1_ci
latin1_german2_ci
latin1_spanish_ci
latin1_swedish_ci
(デフォルト)
latin1
はデフォルトキャラクタセットです。MySQLのlatin1
はWindowscp1252
キャラクタセットと同じです。つまり公式ISO
8859-1
あるいはIANA (アイアナ)
latin1
と同様ですが、アイアナlatin1
は0x80
と0x9f
間のコードポイントは「定義されていません」。
これに対して、cp1252
、つまりMySQLのlatin1
はそれらポジションに対して文字を指定しています。例えば
0x80
はユーロのサインです。cp1252
の「定義されていない」エントリーでは、MySQLは0x81
をUnicode
0x0081
、0x8d
を0x008d
、0x8f
を0x008f
、0x90
を0x0090
そして0x9d
を0x009d
に変換します。
latin1_swedish_ci
照合順序は大部分のMySQLカスタマに使用されているデフォルトです。スウェーデン語/フィンランド語の照合順序ルールに基づいているとされていますが、スウェーデン人やフィンランド人の中にはこのステートメントに賛成しない人もいます。
latin1_german1_ci
とlatin1_german2_ci
照合順序はDIN-1
およびDIN-2
標準に基づいて、DINはDeutsches
Institut fur Normung
(アンシーのドイツ版)を表しています。DIN-1
は「辞書の照合順序」と呼ばれ、DIN-2は「電話帳の照合順序」と呼ばれています。
latin1_german1_ci
(辞書) ルール:
A = A O = O U = U s = s
latin1_german2_ci
(電話帳)
ルール:
A = AE O = OE U = UE s = ss
latin1_spanish_ci
照合順序では、
‘n
’ (n-tilde)
は‘n
’と‘o
’とは区別されます。
macroman
(Mac 西ヨーロッパ言語)
照合順序:
macroman_bin
macroman_general_ci
(デフォルト)
swe7
(7bit Swedish) 照合順序:
swe7_bin
swe7_swedish_ci
(デフォルト)
MySQLではチェコ、スロバキア、ハンガリー、ルーマニア、スロベニア、クロアチア、ポーランドで使用されるキャラクタセットも一部サポートされています。
cp1250
(Windows 中央ヨーロッパ言語) 照合順序:
cp1250_bin
cp1250_croatian_ci
cp1250_czech_cs
cp1250_general_ci
(デフォルト)
cp1250_polish_ci
cp852
(DOS 中央ヨーロッパ言語)
照合順序:
cp852_bin
cp852_general_ci
(デフォルト)
keybcs2
(DOS Kamenicky Czech-Slovak)
照合順序:
keybcs2_bin
keybcs2_general_ci
(デフォルト)
latin2
(ISO 8859-2
中央ヨーロッパ言語) 照合順序:
latin2_bin
latin2_croatian_ci
latin2_czech_cs
latin2_general_ci
(デフォルト)
latin2_hungarian_ci
macce
(Mac 中央ヨーロッパ言語)
照合順序:
macce_bin
macce_general_ci
(デフォルト)
MySQLでは南ヨーロッパや中東、アルメニア語、アラビア語、グルジア語、ギリシャ語、ヘブライ語、トルコ語のキャラクタセットがサポートされています。
armscii8
(ARMSCII-8 Armenian)
照合順序:
armscii8_bin
armscii8_general_ci
(デフォルト)
cp1256
(Windows アラビア語)
照合順序:
cp1256_bin
cp1256_general_ci
(デフォルト)
geostd8
(GEOSTD8 Georgian) 照合順序:
geostd8_bin
geostd8_general_ci
(デフォルト)
greek
(ISO 8859-7 ギリシャ語)
照合順序:
greek_bin
greek_general_ci
(デフォルト)
hebrew
(ISO 8859-8 ヘブライ語)
照合順序:
hebrew_bin
hebrew_general_ci
(デフォルト)
latin5
(ISO 8859-9 トルコ語)
照合順序:
latin5_bin
latin5_turkish_ci
(デフォルト)
バルト語に含まれるキャラクタセットにはエストニア語、ラトビア語、そしてリトアニア言語が含まれます。
cp1257
(Windows バルト語)
照合順序:
cp1257_bin
cp1257_general_ci
(デフォルト)
cp1257_lithuanian_ci
latin7
(ISO 8859-13 バルト語)
照合順序:
latin7_bin
latin7_estonian_cs
latin7_general_ci
(デフォルト)
latin7_general_cs
ベラルーシ語、ブルガリア語、ロシア語、ウクライナ語と共に使用するキリル語のキャラクタセットおよび照合順序を以下に示します。
cp1251
(Windows キリル語)
照合順序:
cp1251_bin
cp1251_bulgarian_ci
cp1251_general_ci
(デフォルト)
cp1251_general_cs
cp1251_ukrainian_ci
cp866
(DOS ロシア語) 照合順序:
cp866_bin
cp866_general_ci
(デフォルト)
koi8r
(KOI8-R Relcom Russian)
照合順序:
koi8r_bin
koi8r_general_ci
(デフォルト)
koi8u
(KOI8-U ウクライナ語)
照合順序:
koi8u_bin
koi8u_general_ci
(デフォルト)
サポートされているアジアのキャラクタセットには、中国語、日本語、韓国語、タイ語が含まれています。これらは複雑な場合があります。たとえば、中国語のキャラクタセットは数千種類の文字に対応していなければなりません。
cp932
およびsjis
キャラクタセットについてのさらに詳しい情報は次を参照してください。項9.10.7.1. 「cp932
のキャラクタセット」
MySQLのアジアのキャラクタセットに関する一般的な質問や問題のサポートについては、次を参照してください。項A.12. 「MySQL 5.1 FAQ ? MySQL Chinese, Japanese, and Korean Character Sets」
big5
(Big5 Traditional Chinese)
照合順序:
big5_bin
big5_chinese_ci
(デフォルト)
cp932
(SJIS for Windows Japanese)
照合順序:
cp932_bin
cp932_japanese_ci
(デフォルト)
eucjpms
(UJIS for Windows Japanese)
照合順序:
eucjpms_bin
eucjpms_japanese_ci
(デフォルト)
euckr
(EUC-KR Korean) 照合順序:
euckr_bin
euckr_korean_ci
(デフォルト)
gb2312
(GB2312 Simplified Chinese)
照合順序:
gb2312_bin
gb2312_chinese_ci
(デフォルト)
gbk
(GBK Simplified Chinese)
照合順序:
gbk_bin
gbk_chinese_ci
(デフォルト)
sjis
(Shift-JIS Japanese) 照合順序:
sjis_bin
sjis_japanese_ci
(デフォルト)
tis620
(TIS620 Thai) 照合順序:
tis620_bin
tis620_thai_ci
(デフォルト)
ujis
(EUC-JP Japanese) 照合順序:
ujis_bin
ujis_japanese_ci
(デフォルト)
なぜcp932
は必要なのでしょうか。
MySQLではsjis
キャラクタセットはアイアナで定義されるShift_JIS
キャラクタセットに対応しており、これらはJIS
X0201およびJIS
X0208キャラクタセットをサポートしています。(詳しくはhttp://www.iana.org/assignments/character-setsをご確認ください。)
しかしながら、記述用語として一般的に使われている「SHIFT
JIS」の意味は
非常にあいまいで、しばしば各ベンダーが独自にShift_JIS
を拡張したものまで含まれることがあります。
例えば、日本語Windows環境で使用される「シフトJIS」はMicrosoftによるShift_JIS
の拡張で、正式な名称はMicrosoft
Windows Codepage
:932
もしくはcp932
といいます。cp932
ではShift_JIS
でサポートされる文字に加え、NEC特殊文字、NEC選定IBM拡張文字?、IBM拡張文字といった
各種拡張文字がサポートされています。
多くの日本語ユーザーがこれら拡張文字等の使用にあたって 問題に直面してきました。これらの問題は以下の要因によって生じていました:
MySQLが自動的にキャラクターセットの変換を行う。
キャラクターセットの変換はUnicode(ucs2
)を介して行われる。
sjis
キャラクターセットはこれら拡張文字の変換をサポートしていない。
いわゆる「シフトJIS」と呼ばれるキャラクターセットからUnicodeへの変換には 複数の変換ルールが存在し、いくつかの文字は変換ルールによって異なるUnicode文字に 変換される。MySQLではこれらの変換ルールのうち、一つだけしかサポートされていない (詳細は後述する)。
MySQLのcp932
キャラクタセットはこれらの問題を解決するよう
デザインされています。
MySQLがキャラクターセットの
変換をサポートするようになった為、異なる変換ルールを持つIANAの
Shift_JIS
とcp932
を二種類の
キャラクターセットとして区別することが重要となります。
cp932
はsjis
とどう異なるか
cp932
キャラクタセットは以下の点でsjis
と異なります。
cp932
ではNEC特殊文字、NEC選定IBM拡張文字?、IBM拡張文字がサポートされる。
.
いくつかのcp932
文字については、二つの異なる
コードポイントから同一のUnicodeコードポイントに変換される。よってこれらの文字をUnicodeからcp932
に戻す際には
何れか一つのコードポイントが選択されなくてはならない。
この「ラウンドトリップ変換」については、Microsoftによって
推奨されるルールが使用されています。(詳しくはhttp://support.microsoft.com/kb/170559/EN-US/をご確認ください。)
この変換ルールは以下のとおりです。
当該文字がJIS X 0208文字とNEC特殊文字の両方に存在する場合には、 JIS X 0208のコードポイントを使用する。
当該文字がNEC特殊文字とIBM拡張文字の両方に存在する場合には、 NEC特殊文字のコードポイントを使用します。
当該文字がNEC選定?IBM拡張文字とIBM拡張文字の両方に存在する場合には、 IBM拡張文字のコードポイントを使用します。
http://www.microsoft.com/globaldev/reference/dbcs/932.htmで表示されるテーブルはcp932
文字のUnicodeポイントに関する情報です。cp932
の表に記載されている文字のうち、
下に四桁の数字が表示されているものについては、その数字は対応するUnicode
ucs2
)
コードポイントを表します。下線付きの二桁の値については
これら二桁の値で始まる一連のcp932
文字があることを表しています。
これらの値をクリックすることで、その二桁の値で始まる
cp932
文字、及びそのUnicodeコードポイントが表示されます。
更に興味のある方は以下のリンクを参照してください。それぞれ、各文字の対応する Unicodeコードポイントを表示します。
NEC 特殊文字:
http://www.microsoft.com/globaldev/reference/dbcs/932/932_87.htm
NEC 選定? IBM 拡張文字:
http://www.microsoft.com/globaldev/reference/dbcs/932/932_ED.htm http://www.microsoft.com/globaldev/reference/dbcs/932/932_EE.htm
IBM 選定文字:
http://www.microsoft.com/globaldev/reference/dbcs/932/932_FA.htm http://www.microsoft.com/globaldev/reference/dbcs/932/932_FB.htm http://www.microsoft.com/globaldev/reference/dbcs/932/932_FC.htm
eucjpms
キャラクターセットと組み合わせて
使用することで、 cp932
でユーザー定義文字の変換がサポートされ、
sjis
/ujis
間での変換問題にも対応しています。詳細は次をhttp://www.opengroup.or.jp/jvc/cde/sjis-euc-e.html参照してください。
いくつかの文字については、sjis
とcp932
.でucs2
との変換ルールが異なります。以下のテーブルはこれらの違いを例示したものです。
ucs2
への変換:
sjis /cp932
値 | sjis ->
ucs2 変換 | cp932 ->
ucs2 変換 |
5C | 005C | 005C |
7E | 007E | 007E |
815C | 2015 | 2015 |
815F | 005C | FF3C |
8160 | 301C | FF5E |
8161 | 2016 | 2225 |
817C | 2212 | FF0D |
8191 | 00A2 | FFE0 |
8192 | 00A3 | FFE1 |
81CA | 00AC | FFE2 |
ucs2
からの変換:
ucs2 値 | ucs2 ->
sjis 変換 | ucs2 ->
cp932 変換 |
005C | 815F | 5C |
007E | 7E | 7E |
00A2 | 8191 | 3F |
00A3 | 8192 | 3F |
00AC | 81CA | 3F |
2015 | 815C | 815C |
2016 | 8161 | 3F |
2212 | 817C | 3F |
2225 | 3F | 8161 |
301C | 8160 | 3F |
FF0D | 3F | 817C |
FF3C | 3F | 815F |
FF5E | 3F | 8160 |
FFE0 | 3F | 8191 |
FFE1 | 3F | 8192 |
FFE2 | 3F | 81CA |
日本語キャラクタセットのユーザーは--character-set-client-handshake
(もしくは
--skip-character-set-client-handshake
)を使うことで重要な効果があることに注意しなければなりません。詳しくは項4.2.2. 「コマンド オプション」を参照してください。