In MariaDB, WEIGHT_STRING()
is een ingebouwde functie die de gewichtsreeks voor de invoerreeks retourneert. De geretourneerde waarde is een binaire tekenreeks die de vergelijkings- en sorteerwaarde van de tekenreeks vertegenwoordigt.
Als de invoertekenreeks een niet-binaire waarde is, bevat de geretourneerde waarde het sorteergewicht van de tekenreeks. Als het een binaire waarde is, is het resultaat hetzelfde als de invoertekenreeks. Dit komt omdat het gewicht voor elke byte in een binaire string de bytewaarde is.
Deze functie is een foutopsporingsfunctie bedoeld voor intern gebruik. Het kan worden gebruikt voor het testen en debuggen van sorteringen.
Syntaxis
De syntaxis gaat als volgt:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ...
Hieronder vindt u een beschrijving van elk argument/clausule.
De AS
Clausule
De optionele AS
clausule staat het casten van de invoerreeks toe naar een binaire of niet-binaire reeks, evenals naar een bepaalde lengte.
AS BINARY(N)
meet de lengte in bytes in plaats van tekens, en rechterpads met 0x00 bytes tot de gewenste lengte.AS CHAR(N)
meet de lengte in karakters, en rechter pads met spaties tot de gewenste lengte.
N
heeft een minimumwaarde van 1
, en als deze kleiner is dan de lengte van de invoertekenreeks, wordt de tekenreeks zonder waarschuwing afgekapt.
Het LEVEL
Clausule
Specificeert dat de retourwaarde gewichten moet bevatten voor specifieke sorteringsniveaus.
De levels
specificatie kan een enkel geheel getal zijn, een door komma's gescheiden lijst van gehele getallen of een reeks gehele getallen gescheiden door een streepje (spatie wordt genegeerd). Gehele getallen kunnen variëren van 1
tot een maximum van 6
, afhankelijk van de sortering, en moeten in oplopende volgorde worden weergegeven.
- Als het
LEVEL
clausule is niet voorzien, een standaard van1
tot het maximum voor de sortering wordt aangenomen. - Als het
LEVEL
is opgegeven zonder een bereik te gebruiken, is een optionele modifier toegestaan. ASC
(de standaardinstelling) retourneert de gewichten zonder enige wijziging.DESC
retourneert bitsgewijze omgekeerde gewichten.REVERSE
geeft de gewichten in omgekeerde volgorde terug.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT HEX(WEIGHT_STRING('z'));
Resultaat:
+-------------------------+ | HEX(WEIGHT_STRING('z')) | +-------------------------+ | 005A | +-------------------------+
Hier gebruiken we de HEX()
functie om niet-afdrukbare resultaten in hexadecimaal formaat weer te geven.
De AS
Clausule
Hier is een voorbeeld met de AS
clausule om de invoerstring naar een bepaald type en lengte te casten.
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';
Resultaat (met verticale uitvoer):
Char 3: 005A00200020 Char 8: 005A0020002000200020002000200020 Binary 3: 7A0000 Binary 8: 7A00000000000000
Collatie
De volgende twee voorbeelden laten zien hoe een string een ander gewicht kan hebben, afhankelijk van de gebruikte sortering.
De sortering die in het eerste voorbeeld wordt gebruikt, is niet hoofdlettergevoelig. De sortering die in het tweede voorbeeld wordt gebruikt, is hoofdlettergevoelig.
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));
Resultaat:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 8F7941AA | +--------+----------+---------------+
En hier is hetzelfde voorbeeld, behalve met een hoofdlettergevoelige 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));
Resultaat:
+--------+----------+---------------+ | String | Hex | Weight String | +--------+----------+---------------+ | PLAY | 504C4159 | 8F7941AA | | play | 706C6179 | 907A42AB | +--------+----------+---------------+
Nullargumenten
Doorgeven van null
retourneert null
:
SELECT WEIGHT_STRING(null);
Resultaat:
+---------------------+ | WEIGHT_STRING(null) | +---------------------+ | NULL | +---------------------+
Ontbrekende argumenten
WEIGHT_STRING()
. aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:
SELECT WEIGHT_STRING();
Resultaat:
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