En MariaDB, WEIGHT_STRING()
es una función integrada que devuelve la cadena de peso para la cadena de entrada. El valor de retorno es una cadena binaria que representa el valor de comparación y clasificación de la cadena.
Si la cadena de entrada es un valor no binario, el valor devuelto contiene el peso de intercalación de la cadena. Si es un valor binario, el resultado es el mismo que la cadena de entrada. Esto se debe a que el peso de cada byte en una cadena binaria es el valor del byte.
Esta función es una función de depuración diseñada para uso interno. Se puede usar para probar y depurar intercalaciones.
Sintaxis
La sintaxis es así:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
A continuación se muestra una descripción de cada argumento/cláusula.
El AS
Cláusula
El AS
opcional La cláusula permite convertir la cadena de entrada en una cadena binaria o no binaria, así como en una longitud particular.
AS BINARY(N)
mide la longitud en bytes en lugar de caracteres, y completa con 0x00 bytes hasta la longitud deseada.AS CHAR(N)
mide la longitud en caracteres y las almohadillas derechas con espacios hasta la longitud deseada.
N
tiene un valor mínimo de 1
, y si es menor que la longitud de la cadena de entrada, la cadena se trunca sin previo aviso.
El LEVEL
Cláusula
Especifica que el valor devuelto debe contener ponderaciones para niveles de intercalación específicos.
Los levels
El especificador puede ser un entero único, una lista de enteros separados por comas o un rango de enteros separados por un guión (se ignoran los espacios en blanco). Los números enteros pueden variar desde 1
hasta un máximo de 6
, según la intercalación, y deben enumerarse en orden ascendente.
- Si el
LEVEL
no se proporciona la cláusula, un valor predeterminado de1
se asume el máximo para la colación. - Si el
LEVEL
se especifica sin usar un rango, se permite un modificador opcional. ASC
(el valor predeterminado) devuelve los pesos sin ninguna modificación.DESC
devuelve pesos invertidos bit a bit.REVERSE
devuelve los pesos en orden inverso.
Ejemplo
He aquí un ejemplo básico:
SELECT HEX(WEIGHT_STRING('z'));
Resultado:
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
Aquí, usamos el HEX()
función para representar resultados no imprimibles en formato hexadecimal.
El AS
Cláusula
Aquí hay un ejemplo usando el AS
cláusula para convertir la cadena de entrada a un tipo y longitud determinados.
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 salida vertical):
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
Colección
Los siguientes dos ejemplos demuestran cómo una cadena puede tener una cadena de peso diferente, según la intercalación que se utilice.
La intercalación utilizada en el primer ejemplo no distingue entre mayúsculas y minúsculas. La intercalación utilizada en el segundo ejemplo distingue entre mayúsculas y 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 | +--------+----------+---------------+
Y aquí está el mismo ejemplo, excepto que se distingue entre mayúsculas y 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
Pasando null
devuelve null
:
SELECT WEIGHT_STRING(null);
Resultado:
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
Argumentos faltantes
Llamando a WEIGHT_STRING()
con el número incorrecto de argumentos, o sin pasar ningún argumento da como resultado un error:
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