Dans MariaDB, WEIGHT_STRING()
est une fonction intégrée qui renvoie la chaîne de poids pour la chaîne d'entrée. La valeur de retour est une chaîne binaire qui représente la valeur de comparaison et de tri de la chaîne.
Si la chaîne d'entrée est une valeur non binaire, la valeur de retour contient le poids de classement de la chaîne. S'il s'agit d'une valeur binaire, le résultat est le même que la chaîne d'entrée. En effet, le poids de chaque octet d'une chaîne binaire est la valeur de l'octet.
Cette fonction est une fonction de débogage destinée à un usage interne. Il peut être utilisé pour tester et déboguer les classements.
Syntaxe
La syntaxe ressemble à ceci :
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
Vous trouverez ci-dessous une description de chaque argument/clause.
Le AS
Article
Le AS
facultatif La clause permet de convertir la chaîne d'entrée en une chaîne binaire ou non binaire, ainsi qu'à une longueur particulière.
AS BINARY(N)
mesure la longueur en octets plutôt qu'en caractères, et remplit à droite avec 0x00 octets jusqu'à la longueur souhaitée.AS CHAR(N)
mesure la longueur en caractères et remplit à droite avec des espaces à la longueur souhaitée.
N
a une valeur minimale de 1
, et si elle est inférieure à la longueur de la chaîne d'entrée, la chaîne est tronquée sans avertissement.
Le LEVEL
Article
Spécifie que la valeur de retour doit contenir des pondérations pour des niveaux de classement spécifiques.
Les levels
Le spécificateur peut être un entier unique, une liste d'entiers séparés par des virgules ou une plage d'entiers séparés par un tiret (les espaces blancs sont ignorés). Les nombres entiers peuvent aller de 1
jusqu'à un maximum de 6
, en fonction du classement, et doivent être répertoriés par ordre croissant.
- Si le
LEVEL
la clause n'est pas fournie, la valeur par défaut est1
au maximum pour le classement est supposé. - Si le
LEVEL
est spécifié sans utiliser de plage, un modificateur facultatif est autorisé. ASC
(par défaut) renvoie les poids sans aucune modification.DESC
renvoie des poids inversés au niveau du bit.REVERSE
renvoie les poids dans l'ordre inverse.
Exemple
Voici un exemple de base :
SELECT HEX(WEIGHT_STRING('z'));
Résultat :
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
Ici, nous utilisons le HEX()
fonction pour représenter les résultats non imprimables au format hexadécimal.
Le AS
Article
Voici un exemple utilisant le AS
clause pour convertir la chaîne d'entrée en un type et une longueur donnés.
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';
Résultat (en utilisant la sortie verticale) :
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
Collation
Les deux exemples suivants montrent comment une chaîne peut avoir une chaîne de poids différente, selon le classement utilisé.
Le classement utilisé dans le premier exemple ne respecte pas la casse. Le classement utilisé dans le deuxième exemple est sensible à la casse.
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));
Résultat :
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 8F7941AA | +--------+----------+---------------+
Et voici le même exemple, sauf avec un classement sensible à la casse.
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));
Résultat :
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 907A42AB | +--------+----------+---------------+
Arguments nuls
Passer null
renvoie null
:
SELECT WEIGHT_STRING(null);
Résultat :
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
Arguments manquants
Appel de WEIGHT_STRING()
avec le mauvais nombre d'arguments, ou sans passage d'arguments, une erreur se produit :
SELECT WEIGHT_STRING();
Résultat :
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