Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como a função WEIGHT_STRING() funciona no MySQL


No MySQL, o WEIGHT_STRING() A função retorna a string de peso para a string de entrada. O valor de retorno é uma string binária que representa a comparação e o valor de classificação da string.

Se a string de entrada for um valor não binário, o valor de retorno conterá os pesos de agrupamento para a string. Se for um valor binário, o resultado é o mesmo que a string de entrada. Isso ocorre porque o peso de cada byte em uma string binária é o valor do byte.

Esta função é uma função de depuração destinada ao uso interno. Ele pode ser usado para testar e depurar agrupamentos. Observe que seu comportamento pode mudar entre as versões do MySQL.


Sintaxe


A sintaxe fica assim:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [sinalizadores])

Onde str é a cadeia de entrada. O opcional AS A cláusula permite converter a string de entrada para um determinado tipo e comprimento. Os flags opcionais argumento não é usado atualmente no MySQL (a partir da versão 8.0).

Exemplo 1 – Uso básico


Aqui está um exemplo básico de uso usando uma string de entrada não binária:
SELECT HEX(WEIGHT_STRING('Gato'));

Resultado:
+---------------------------+| HEX(WEIGHT_STRING('Gato')) |+---------------------------+| 1C7A1C471E95 |+---------------------------+

Observe que eu uso o HEX() função para exibir o WEIGHT_STRING() resultado. Isso ocorre porque WEIGHT_STRING() retorna um resultado binário. Podemos usar HEX() para exibir o resultado em um formulário imprimível.

Se eu não usar HEX() neste exemplo eu recebo isso:
SELECT WEIGHT_STRING('Gato');

Resultado:
+----------------------+| WEIGHT_STRING('Gato') |+----------------------+| zG? |+----------------------+

Então, só para ficar claro, aqui está a string, a representação hexadecimal dessa string e a representação hexadecimal de sua string de peso:
SET @str ='Gato';SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));

Resultado:
+------+-----------+--------------------------+ | @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) |+------+-----------+--------------------- -----+| Gato | 436174 | 1C7A1C471E95 |+------+-----------+--------------------------+ 

Exemplo 2 - A Cláusula AS


Aqui está um exemplo usando o AS cláusula para converter a string de entrada para um determinado tipo e comprimento.
SET @str ='Cat';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))) 'Binário 3', HEX(WEIGHT_STRING(@str AS BINARY(8))) 'Binário 8';

Resultado:
+--------------+--------------+----------+----- -------------+| Cara 3 | Cara 8 | Binário 3 | Binário 8 |+--------------+--------------+----------+----- -------------+| 1C7A1C471E95 | 1C7A1C471E95 | 436174 | 4361740000000000 |+--------------+--------------+----------+------ ------------+

Exemplo 3 – Agrupamento


Os dois exemplos a seguir demonstram como uma string pode ter uma string de peso diferente, dependendo do agrupamento que está sendo usado. A ordenação usada no primeiro exemplo não faz distinção entre acentos e maiúsculas e minúsculas. A ordenação usada no segundo exemplo faz distinção entre acentos e maiúsculas e minúsculas.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_ai_ci;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Peso String'UNION ALLSELECT @inferior, HEX(@inferior), HEX(WEIGHT_STRING(@inferior));

Resultado:
+--------+--------+---------------+| Cadeia | Hex | Peso String |+--------+--------+---------------+| CAT | 434154 | 1C7A1C471E95 || gato | 636174 | 1C7A1C471E95 |+-----------+--------+---------------+

E aqui está o mesmo exemplo, exceto com um agrupamento sensível a acentos e maiúsculas.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_as_cs;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@upper)) 'Peso String'UNION ALLSELECT @inferior, HEX(@inferior), HEX(WEIGHT_STRING(@inferior));

Resultado:
+--------+--------+---------------------------- ------------------+| Cadeia | Hex | Cadeia de Peso |+--------+--------+------------------ ------------------+| CAT | 434154 | 1C7A1C471E9500000020002000200000000800080008 || gato | 636174 | 1C7A1C471E9500000020002000200000000200020002 |+--------+--------+----------------------------- ------------------+