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 oAS
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 |+--------+--------+----------------------------- ------------------+