I MySQL, WEIGHT_STRING()
funktion returnerar viktsträngen för inmatningssträngen. Returvärdet är en binär sträng som representerar jämförelse- och sorteringsvärdet för strängen.
Om inmatningssträngen är ett icke-binärt värde, innehåller returvärdet sorteringsvikterna för strängen. Om det är ett binärt värde är resultatet detsamma som inmatningssträngen. Detta beror på att vikten för varje byte i en binär sträng är bytevärdet.
Denna funktion är en felsökningsfunktion avsedd för internt bruk. Den kan användas för testning och felsökning av kollationer. Observera att dess beteende kan ändras mellan MySQL-versioner.
Syntax
Syntaxen ser ut så här:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])
Där str
är inmatningssträngen. Den valfria AS
sats låter dig casta inmatningssträngen till en given typ och längd. De valfria flags
argument används för närvarande inte i MySQL (från och med version 8.0).
Exempel 1 – Grundläggande användning
Här är ett grundläggande exempel på användning av en icke-binär ingångssträng:
SELECT HEX(WEIGHT_STRING('Cat'));
Resultat:
+---------------------------+ | HEX(WEIGHT_STRING('Cat')) | +---------------------------+ | 1C7A1C471E95 | +---------------------------+
Observera att jag använder HEX()
funktion för att visa WEIGHT_STRING()
resultat. Detta beror på att WEIGHT_STRING()
returnerar ett binärt resultat. Vi kan använda HEX()
för att visa resultatet i en utskrivbar form.
Om jag inte använder HEX()
i det här exemplet får jag detta:
SELECT WEIGHT_STRING('Cat');
Resultat:
+----------------------+ | WEIGHT_STRING('Cat') | +----------------------+ | zG? | +----------------------+
Så bara för att vara tydlig, här är strängen, den hexadecimala representationen av den strängen och den hexadecimala representationen av dess viktsträng:
SET @str = 'Cat'; SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));
Resultat:
+------+-----------+--------------------------+ | @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) | +------+-----------+--------------------------+ | Cat | 436174 | 1C7A1C471E95 | +------+-----------+--------------------------+
Exempel 2 – AS-klausulen
Här är ett exempel med AS
sats för att kasta inmatningssträngen till en given typ och längd.
SET @str = 'Cat'; 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:
+--------------+--------------+----------+------------------+ | Char 3 | Char 8 | Binary 3 | Binary 8 | +--------------+--------------+----------+------------------+ | 1C7A1C471E95 | 1C7A1C471E95 | 436174 | 4361740000000000 | +--------------+--------------+----------+------------------+
Exempel 3 – Sortering
Följande två exempel visar hur en sträng kan ha olika vikt, beroende på vilken sortering som används. Den sammanställning som används i det första exemplet är okänslig för accent och skiftläge. Den sortering som används i det andra exemplet är accentkänslig och skiftlägeskänslig.
SET @upper = _utf8mb4 'CAT' COLLATE utf8mb4_0900_ai_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 | Weight String | +--------+--------+---------------+ | CAT | 434154 | 1C7A1C471E95 | | cat | 636174 | 1C7A1C471E95 | +--------+--------+---------------+
Och här är samma exempel, förutom med en accentkänslig och skiftlägeskänslig sortering.
SET @upper = _utf8mb4 'CAT' COLLATE utf8mb4_0900_as_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 | Weight String | +--------+--------+----------------------------------------------+ | CAT | 434154 | 1C7A1C471E9500000020002000200000000800080008 | | cat | 636174 | 1C7A1C471E9500000020002000200000000200020002 | +--------+--------+----------------------------------------------+