No MariaDB,
WEIGHT_STRING()
é uma função interna que 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á o peso de agrupamento da 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.
Sintaxe
A sintaxe fica assim:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
Abaixo está uma descrição de cada argumento/cláusula.
O AS
Cláusula
O opcional
AS
A cláusula permite converter a string de entrada em uma string binária ou não binária, bem como em um comprimento específico. AS BINARY(N)
mede o comprimento em bytes em vez de caracteres, e preenche a direita com 0x00 bytes até o comprimento desejado.AS CHAR(N)
mede o comprimento em caracteres e pads à direita com espaços até o comprimento desejado.
N
tem um valor mínimo de 1
, e se for menor que o comprimento da string de entrada, a string será truncada sem aviso. O LEVEL
Cláusula
Especifica que o valor de retorno deve conter pesos para níveis de agrupamento específicos.
Os
levels
especificador pode ser um único inteiro, uma lista de inteiros separados por vírgula ou um intervalo de inteiros separados por um traço (espaço em branco é ignorado). Os inteiros podem variar de 1
até um máximo de 6
, dependendo do agrupamento, e precisam ser listados em ordem crescente. - Se o
LEVEL
cláusula não é fornecida, um padrão de1
ao máximo para o agrupamento é assumido. - Se o
LEVEL
for especificado sem usar um intervalo, um modificador opcional é permitido. ASC
(o padrão) retorna os pesos sem nenhuma modificação.DESC
retorna pesos invertidos bit a bit.REVERSE
retorna os pesos na ordem inversa.
Exemplo
Segue um exemplo básico:
SELECT HEX(WEIGHT_STRING('z'));
Resultado:
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
Aqui, usamos o
HEX()
função para representar resultados não imprimíveis em formato hexadecimal. O AS
Cláusula
Aqui está um exemplo usando o
AS
cláusula para converter a string de entrada para um determinado tipo e comprimento. 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';
Resultado (usando saída vertical):
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
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 diferencia maiúsculas de minúsculas. A ordenação usada no segundo exemplo faz distinção entre maiúsculas e minúsculas.
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));
Resultado:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 8F7941AA | +--------+----------+---------------+
E aqui está o mesmo exemplo, exceto com um agrupamento que diferencia maiúsculas de minúsculas.
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));
Resultado:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 907A42AB | +--------+----------+---------------+
Argumentos nulos
Passando
null
retorna null
:SELECT WEIGHT_STRING(null);
Resultado:
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
Argumentos ausentes
Chamando
WEIGHT_STRING()
com o número errado de argumentos ou sem passar nenhum argumento resulta em um erro:SELECT WEIGHT_STRING();
Resultado:
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