MariaDBでは、WEIGHT_STRING()
入力文字列の重み文字列を返す組み込み関数です。戻り値は、文字列の比較値と並べ替え値を表すバイナリ文字列です。
入力文字列が非バイナリ値の場合、戻り値には文字列の照合の重みが含まれます。バイナリ値の場合、結果は入力文字列と同じになります。これは、バイナリ文字列の各バイトの重みがバイト値であるためです。
この関数は、内部使用を目的としたデバッグ関数です。照合のテストとデバッグに使用できます。
構文
構文は次のようになります:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
以下は、各引数/句の説明です。
AS
条項
オプションのAS
句を使用すると、入力文字列を特定の長さだけでなく、バイナリ文字列または非バイナリ文字列にキャストできます。
-
AS BINARY(N)
長さを文字ではなくバイト単位で測定し、0x00バイトの右側のパッドを目的の長さにします。 -
AS CHAR(N)
文字の長さを測定し、スペースのある右側のパッドを希望の長さにします。
N
最小値は1
です。 、および入力文字列の長さより短い場合、文字列は警告なしに切り捨てられます。
LEVEL
条項
戻り値に特定の照合レベルの重みを含める必要があることを指定します。
levels
指定子は、単一の整数、コンマで区切られた整数のリスト、またはダッシュで区切られた整数の範囲のいずれかです(空白は無視されます)。整数の範囲は1
です。 最大6
、照合に依存し、昇順でリストする必要があります。
-
LEVEL
の場合 句は指定されていません。デフォルトは1
です。 照合の最大値が想定されます。 -
LEVEL
の場合 範囲を使用せずに指定された場合、オプションの修飾子が許可されます。 -
ASC
(デフォルト)変更なしで重みを返します。 -
DESC
ビット単位で反転された重みを返します。 REVERSE
重みを逆の順序で返します。
例
基本的な例は次のとおりです。
SELECT HEX(WEIGHT_STRING('z'));
結果:
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
ここでは、HEX()
を使用します 印刷できない結果を16進形式で表す関数。
AS
条項
AS
を使用した例を次に示します 入力文字列を指定されたタイプと長さにキャストする句。
SET @str = 'z';
SELECT
HEX(WEIGHT_STRING(@str AS CHAR(3))) 'Char 3',
HEX(WEIGHT_STRING(@str AS CHAR(8))) 'Char 8',
HEX(WEIGHT_STRING(@str AS BINARY(3))) 'Binary 3',
HEX(WEIGHT_STRING(@str AS BINARY(8))) 'Binary 8';
結果(垂直出力を使用):
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
照合
次の2つの例は、使用されている照合に応じて、文字列が異なる重みの文字列を持つ方法を示しています。
最初の例で使用されている照合では、大文字と小文字は区別されません。 2番目の例で使用されている照合では、大文字と小文字が区別されます。
SET @upper = _latin1 'PLAY' COLLATE latin1_general_ci;
SET @lower = lcase(@upper);
SELECT
@upper 'String',
HEX(@upper) 'Hex',
HEX(WEIGHT_STRING(@upper)) 'Weight String'
UNION ALL
SELECT
@lower,
HEX(@lower),
HEX(WEIGHT_STRING(@lower));
結果:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 8F7941AA | +--------+----------+---------------+
大文字と小文字を区別する照合を除いて、同じ例を次に示します。
SET @upper = _latin1 'PLAY' COLLATE latin1_general_cs;
SET @lower = lcase(@upper);
SELECT
@upper 'String',
HEX(@upper) 'Hex',
HEX(WEIGHT_STRING(@upper)) 'Weight String'
UNION ALL
SELECT
@lower,
HEX(@lower),
HEX(WEIGHT_STRING(@lower));
結果:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 907A42AB | +--------+----------+---------------+
ヌル引数
null
を渡す null
を返します :
SELECT WEIGHT_STRING(null);
結果:
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
引数がありません
WEIGHT_STRING()
を呼び出す 引数の数が間違っているか、引数を渡さないと、エラーが発生します:
SELECT WEIGHT_STRING();
結果:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1