I MariaDB, WEIGHT_STRING()
er en indbygget funktion, der returnerer vægtstrengen for inputstrengen. Returværdien er en binær streng, der repræsenterer strengens sammenlignings- og sorteringsværdi.
Hvis inputstrengen er en ikke-binær værdi, indeholder returværdien strengens sorteringsvægt. Hvis det er en binær værdi, er resultatet det samme som inputstrengen. Dette skyldes, at vægten for hver byte i en binær streng er byteværdien.
Denne funktion er en fejlfindingsfunktion beregnet til intern brug. Den kan bruges til test og fejlfinding af kollationer.
Syntaks
Syntaksen ser sådan ud:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
Nedenfor er en beskrivelse af hvert argument/klausul.
AS
Klausul
Den valgfri AS
klausul tillader casting af inputstrengen til en binær eller ikke-binær streng, såvel som til en bestemt længde.
AS BINARY(N)
måler længden i bytes i stedet for tegn, og højre pads med 0x00 bytes til den ønskede længde.AS CHAR(N)
måler længden i tegn og højre pads med mellemrum til den ønskede længde.
N
har en minimumsværdi på 1
, og hvis den er mindre end længden af inputstrengen, afkortes strengen uden varsel.
LEVEL
Klausul
Angiver, at returværdien skal indeholde vægte for specifikke sorteringsniveauer.
levels
specifikation kan enten være et enkelt heltal, en kommasepareret liste over heltal eller et interval af heltal adskilt af en bindestreg (mellemrum ignoreres). Heltal kan variere fra 1
til et maksimum på 6
, afhængig af sorteringen, og skal være opført i stigende rækkefølge.
- Hvis
LEVEL
klausul er ikke angivet, en standard på1
til det maksimale for sammenstillingen antages. - Hvis
LEVEL
er angivet uden brug af et område, er en valgfri modifikator tilladt. ASC
(standard) returnerer vægtene uden nogen ændring.DESC
returnerer bitvist-inverterede vægte.REVERSE
returnerer vægtene i omvendt rækkefølge.
Eksempel
Her er et grundlæggende eksempel:
SELECT HEX(WEIGHT_STRING('z'));
Resultat:
+------------------------+| HEX(VÆGT_STRING('z')) |+------------------------+| 005A |+-------------------------+
Her bruger vi HEX()
funktion til at repræsentere ikke-udskrivbare resultater i hexadecimalt format.
AS
Klausul
Her er et eksempel, der bruger AS
klausul for at caste inputstrengen til en given type og længde.
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';
Resultat (ved hjælp af lodret output):
Char 3:005A00200020 Char 8:005A0020002000200020002000200020Binær 3:7A0000Binær 8:7A00000000000000
Samling
De følgende to eksempler viser, hvordan en streng kan have en anden vægtstreng, afhængigt af den anvendte sortering.
Den sortering, der blev brugt i det første eksempel, skelner mellem store og små bogstaver. Den sortering, der bruges i det andet eksempel, skelner mellem store og små bogstaver.
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));
Resultat:
+--------+----------+--------------+| String | Hex | Vægtstreng |+--------+-----------------+| SPIL | 504C4159 | 8F7941AA || spil | 706C6179 | 8F7941AA |+--------+-----------------+
Og her er det samme eksempel, undtagen med en versalfølsom sortering.
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));
Resultat:
+--------+----------+--------------+| String | Hex | Vægtstreng |+--------+-----------------+| SPIL | 504C4159 | 8F7941AA || spil | 706C6179 | 907A42AB |+--------+-----------+-------------------+
Nul-argumenter
Sender null
returnerer null
:
SELECT WEIGHT_STRING(null);
Resultat:
+----------------------------+| WEIGHT_STRING(nul) |+---------------------+| NULL |+----------------------------+
Manglende argumenter
Kalder WEIGHT_STRING()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
SELECT WEIGHT_STRING();
Resultat:
FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af ')' på linje 1