sql >> Database teknologi >  >> RDS >> MariaDB

Sådan fungerer WEIGHT_STRING() i MariaDB

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

  1. Hvordan forbereder man en erklæring til opdateringsforespørgsel?

  2. Oracle Pl/SQL:Gå gennem XMLTYPE-noder

  3. Sådan fungerer LOG() i MariaDB

  4. Opret en MySQL-database