MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

10.3.8 文字セットイントロデューサ

文字列リテラル、16 進リテラルまたはビット値リテラルには、特定の文字セットおよび照合順序を使用する文字列として指定するために、オプションの文字セットイントロデューサおよび COLLATE 句を指定できます:

[_charset_name] literal [COLLATE collation_name]

_charset_name 式は正式にはイントロデューサと呼ばれます。 パーサーに「後続の文字列が文字セット charset_name を使用する」ことを通知します。 イントロデューサは、CONVERT() のように文字列をイントロデューサ文字セットに変更しません。 パディングは発生する可能性がありますが、文字列値は変更されません。 イントロデューサは単なる信号です。

文字列リテラルの場合、イントロデューサと文字列の間の空白は許可されますが、オプションです。

文字セットリテラルの場合、イントロデューサは次の文字列の文字セットを示しますが、パーサーが文字列内でエスケープ処理を実行する方法は変更しません。 エスケープは常に、character_set_connection で指定された文字セットに従ってパーサーが解釈します。 その他の説明と例については、セクション10.3.6「文字列リテラルの文字セットおよび照合順序」 を参照してください。

例:

SELECT 'abc';
SELECT _latin1'abc';
SELECT _binary'abc';
SELECT _utf8mb4'abc' COLLATE utf8mb4_danish_ci;

SELECT _latin1 X'4D7953514C';
SELECT _utf8mb4 0x4D7953514C COLLATE utf8mb4_danish_ci;

SELECT _latin1 b'1000001';
SELECT _utf8mb4 0b1000001 COLLATE utf8mb4_danish_ci;

文字セットイントロデューサと COLLATE 句は、標準 SQL 仕様に基づいて実装されています。

文字列リテラルは、_binary イントロデューサを使用してバイナリ文字列として指定できます。 16 進数リテラルおよびビット値リテラルはデフォルトでバイナリ文字列であるため、_binary は許可されますが、通常は不要です。_binary は、16 進数リテラルまたはビットリテラルをバイナリ文字列として保持し、それ以外の場合はリテラルを数値として処理する場合に役立ちます。 たとえば、ビット操作では、MySQL 8.0 以上で数値またはバイナリ文字列引数が許可されますが、デフォルトでは 16 進数リテラルおよびビットリテラルは数値として扱われます。 このようなリテラルのバイナリ文字列コンテキストを明示的に指定するには、少なくとも次のいずれかの引数に_binary イントロデューサを使用します:

mysql> SET @v1 = X'000D' | X'0BC0';
mysql> SET @v2 = _binary X'000D' | X'0BC0';
mysql> SELECT HEX(@v1), HEX(@v2);
+----------+----------+
| HEX(@v1) | HEX(@v2) |
+----------+----------+
| BCD      | 0BCD     |
+----------+----------+

両方のビット操作で表示される結果は似ていますが、_binary のない結果は BIGINT 値ですが、_binary の結果はバイナリ文字列です。 結果タイプが異なるため、表示される値は異なります: 数値の結果には、上位 0 桁は表示されません。

MySQL は、文字列リテラル、16 進リテラルまたはビット値リテラルの文字セットおよび照合順序を次の方法で決定します:

例: