MySQL バージョン 4.1 以降、Unicode データを保存するために次の新しいキャラクタセットが用意されています: ucs2 (UCS-2 Unicode キャラクタセット)および utf8 (Unicode キャラクタセットの UTF-8 エンコード)。
UCS-2(Unicode のバイナリ表現)では、各文字は 2 バイトの Unicode と最上位のバイトで最初に表現されます。例 : "ラテン文字の大文字 A" はコード 0x0041 ですが、2 バイトシーケンス 0x00 0x41 として保存されています。"キリル文字の小文字 YERU"(Unicode 0x044B)は2 バイトシーケンス 0x04 0x4B として保存されています。Unicode 文字および対応するコードについては、Unicode Home Page を参照してください。
一時的な制限:UCS-2 はクライアントキャラクタセットとしては(まだ)使用できません。つまり、SET NAMES ucs2 は有効ではないということです。
UTF8 キャラクタセット(Unicode 表現の変換)は、Unicode データを保存する別の方法であり、RFC2279 に基づき実装されています。さまざまな Unicode 文字を長さの異なるバイトシーケンスに適合させることが、UTF8 キャラクタセットの概念です。
基本的なラテン文字、数字、句読点は 1 バイトを使用します。
ヨーロッパおよび中東のスクリプト文字の多くは、2 バイトシーケンスに適合します。拡張ラテン文字(チルダ、長音、鋭アクセント、抑音アクセントその他のアクセント付き)、キリル文字、ギリシア文字、アルメニア文字、ヘブライ文字、アラビア文字、シリア文字その他。
韓国語、中国語、日本語の表意文字は、3 バイトシーケンスを使用します。
現時点では、MySQL UTF8 サポートに 4 バイトシーケンスは含まれていません。
ヒント:スペースを UTF8 で保存するには、CHAR ではなく VARCHAR を使用してください。
そのようにしないと、MySQL では CHAR(10) CHARACTER SET utf8 カラムに対して 30 バイトを確保しなければなりません。これは、使用可能な最大長が 30 バイトであるためです。