sql >> Database teknologi >  >> RDS >> Mysql

Sådan fungerer funktionen WEIGHT_STRING() i MySQL

I MySQL er WEIGHT_STRING() funktion 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 sorteringsvægtene for strengen. 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. Det kan bruges til test og fejlfinding af kollationer. Bemærk, at dens adfærd kan ændre sig mellem MySQL-versioner.

Syntaks

Syntaksen ser sådan ud:

WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])

Hvor str er inputstrengen. Den valgfri AS klausul giver dig mulighed for at caste inputstrengen til en given type og længde. De valgfrie flags argument bruges i øjeblikket ikke i MySQL (fra version 8.0).

Eksempel 1 – Grundlæggende brug

Her er et grundlæggende eksempel på brug af en ikke-binær inputstreng:

SELECT HEX(WEIGHT_STRING('Cat'));

Resultat:

+---------------------------+
| HEX(WEIGHT_STRING('Cat')) |
+---------------------------+
| 1C7A1C471E95              |
+---------------------------+

Bemærk, at jeg bruger HEX() funktion for at vise WEIGHT_STRING() resultat. Dette er fordi WEIGHT_STRING() returnerer et binært resultat. Vi kan bruge HEX() for at vise resultatet i en udskrivbar form.

Hvis jeg ikke bruger HEX() i dette eksempel får jeg dette:

SELECT WEIGHT_STRING('Cat');

Resultat:

+----------------------+
| WEIGHT_STRING('Cat') |
+----------------------+
| zG?                |
+----------------------+

Så bare for at være klar, her er strengen, den hexadecimale repræsentation af den streng og den hexadecimale repræsentation af dens vægtstreng:

SET @str = 'Cat';
SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));

Resultat:

+------+-----------+--------------------------+
| @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) |
+------+-----------+--------------------------+
| Cat  | 436174    | 1C7A1C471E95             |
+------+-----------+--------------------------+

Eksempel 2 – AS-klausulen

Her er et eksempel, der bruger AS klausul for at caste inputstrengen til en given type og længde.

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

Eksempel 3 – Sortering

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, er accentufølsom og case-ufølsom. Den sortering, der bruges i det andet eksempel, er accentfølsom og skelner mellem store og små bogstaver.

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

Og her er det samme eksempel, undtagen med en accentfølsom og store og små bogstaver.

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. PG::ConnectionBad:fe_sendauth:ingen adgangskode angivet

  2. Hvad er forskellen mellem VARCHAR og NVARCHAR i SQL server - SQL Server / T-SQL Tutorial Del 32

  3. Hvordan gemmer man mappe / hierarki / træstruktur i databasen?

  4. Opdater/opdater en formularskærm i Oracle D2k Forms 6i