sql >> Databasteknik >  >> RDS >> Mysql

Hur WEIGHT_STRING()-funktionen fungerar i MySQL

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 |
+--------+--------+----------------------------------------------+

  1. Hur man stänger sqlalchemy-anslutning i MySQL

  2. En översikt över PostgreSQL 13 libpq sslpassword anslutningsparametrar

  3. En recension av de nya analytiska fönsterfunktionerna i MySQL 8.0

  4. Hur man formaterar SQLite-resultat som en tabell