概要
MySQL 組み込みの関数を使ってコードポイントから表示される文字を調べるもしくは文字からコードポイントを調べることができます。MySQL クライアントで照合順序によって文字が一致するかどうかを調べるときに便利です。具体的な例はこちらの記事をご参照ください。
前提
ターミナルもしくはコマンドラインの文字集合は UTF-8 とします。
文字集合と照合順序を指定する
ターミナルもしくはコマンドラインで表示するために文字集合を指定します。utf8mb4
は絵文字に対応しています。
SET NAMES 'utf8mb4';
照合順序も一緒に指定できます。
SET NAMES 'utf8mb4' COLLATE utf8mb4_unicode_520_ci;
文字からコードポイントを求める
CONVERT
関数で utf32 に変換して HEX
関数でバイト列を求めます。
SELECT HEX(CONVERT("あ" USING utf32));
「あ」の場合、00003042
が得られますので、コードポイントは U+3042 となります。
コードポイントから文字を求める
CHAR
関数で utf32
のバイト列をつくります。表示の際には自動的に変換されます。
SELECT CHAR(0x3042 USING utf32);
文字から UTF-16 のサロゲートペアのコードポイントを求める
UTF-16 の場合、U+10000 とそれ以降の文字はサロゲートペアによって表現されます。U+1F42C (イルカ) を試してみましょう。
SELECT HEX(CONVERT(CHAR(0x1F42C USING utf32) USING utf16));
結果は D83DDC2C
になるので、上位サロゲート、下位サロゲートのコードポイントはそれぞれ U+D83D と U+DC2C です。
UTF-16 のサロゲートペアのコードポイントから文字を求める
CHAR
関数を使います。上位サロゲート、下位サロゲートがそれぞれ U+D83D と U+DC2C の場合、次のリテラルを使います。
SELECT CHAR(0xD83DDC2C USING utf16);
次の表記も可能です。
SELECT CHAR(x'D83DDC2C' USING utf16);
文字から UTF-8 のバイト列を求める
UTF-8 のバイト列を求めるのに HEX
関数を使います。
SELECT HEX("あ");
結果は E38182
になりますので、文字リテラルは 0xE38182
になります。
SELECT 0xE38182;
UTF-8 のバイト列からコードポイントを求める
U+3042 (「あ」)の UTF-8 のバイト列は 0xE3 0x81 0x82 であらわされるので、文字リテラルは 0xE38182
です。CONVERT
関数で UTF-32 に変換して、HEX
関数でバイト列を求めます。
SELECT HEX(CONVERT(CHAR(0xE38182 USING utf8mb4) USING utf32));