5
3

More than 5 years have passed since last update.

MySQL クライアントでコードポイントと文字の相互変換

Last updated at Posted at 2016-08-15

概要

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));
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3