Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonctionnement de la fonction WEIGHT_STRING() dans MySQL

Dans MySQL, le WEIGHT_STRING() La fonction 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 les pondérations de classement pour 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 des classements. Notez que son comportement peut changer entre les versions de MySQL.

Syntaxe

La syntaxe ressemble à ceci :

WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])

str est la chaîne d'entrée. Le AS facultatif La clause vous permet de convertir la chaîne d'entrée en un type et une longueur donnés. Les flags facultatifs l'argument n'est pas utilisé actuellement dans MySQL (à partir de la version 8.0).

Exemple 1 - Utilisation de base

Voici un exemple basique d'utilisation utilisant une chaîne d'entrée non binaire :

SELECT HEX(WEIGHT_STRING('Chat'));

Résultat :

+---------------------------+| HEX(WEIGHT_STRING('Chat')) |+---------------------------+| 1C7A1C471E95 |+----------------------------------------+

Notez que j'utilise le HEX() fonction pour afficher le WEIGHT_STRING() résultat. C'est parce que WEIGHT_STRING() renvoie un résultat binaire. Nous pouvons utiliser HEX() pour afficher le résultat sous une forme imprimable.

Si je n'utilise pas HEX() dans cet exemple, j'obtiens ceci :

SELECT WEIGHT_STRING('Chat');

Résultat :

+----------------------+| WEIGHT_STRING('Chat') |+----------------------+| zG ? |+---------------------+

Donc, juste pour être clair, voici la chaîne, la représentation hexadécimale de cette chaîne et la représentation hexadécimale de sa chaîne de poids :

SET @str ='Chat';SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));

Résultat :

+------+-----------+--------------------------+ | @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) |+------+-----------+--------------------- -----+| Chat | 436174 | 1C7A1C471E95 |+------+-----------+--------------------------+ 

Exemple 2 - La clause AS

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 ='Chat';SELECT HEX(WEIGHT_STRING(@str AS CHAR(3))) 'Car 3', HEX(WEIGHT_STRING(@str AS CHAR(8))) 'Car 8', HEX( WEIGHT_STRING(@str AS BINARY(3))) 'Binary 3', HEX(WEIGHT_STRING(@str AS BINARY(8))) 'Binary 8';

Résultat :

+--------------+-------------+----------+----- --------------+| Car 3 | Car 8 | Binaire 3 | Binaire 8 |+--------------+-------------+----------+----- --------------+| 1C7A1C471E95 | 1C7A1C471E95 | 436174 | 4361740000000000 |+-------------+--------------+----------+------ ------------+

Exemple 3 – Classement

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 est insensible aux accents et à la casse. Le classement utilisé dans le deuxième exemple est sensible aux accents et à la casse.

SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_ai_ci;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Poids Chaîne'UNION ALLSELECT @lower, HEX(@lower), HEX(WEIGHT_STRING(@lower));

Résultat :

+--------+--------+---------------+| Chaîne | Hex | Chaîne de poids |+--------+--------+---------------+| CHAT | 434154 | 1C7A1C471E95 || chat | 636174 | 1C7A1C471E95 |+--------+--------+---------------+

Et voici le même exemple, sauf avec un classement sensible aux accents et à la casse.

SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_as_cs;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Poids Chaîne'UNION ALLSELECT @lower, HEX(@lower), HEX(WEIGHT_STRING(@lower));

Résultat :

+--------+--------+---------------------------- ------------------+| Chaîne | Hex | Chaîne de poids |+--------+--------+---------------------------- ------------------+| CHAT | 434154 | 1C7A1C471E9500000020002000200000000800080008 || chat | 636174 | 1C7A1C471E9500000020002000200000000200020002 |+--------+--------+-------------------------------------- -----------------+