V MySQL je to WEIGHT_STRING()
funkce vrací váhový řetězec pro vstupní řetězec. Vrácená hodnota je binární řetězec, který představuje hodnotu porovnání a řazení řetězce.
Pokud je vstupní řetězec nebinární hodnotou, vrácená hodnota obsahuje váhy řazení pro řetězec. Pokud se jedná o binární hodnotu, výsledek je stejný jako vstupní řetězec. Je to proto, že váha každého bajtu v binárním řetězci je hodnota bajtu.
Tato funkce je funkce ladění určená pro interní použití. Lze jej použít pro testování a ladění porovnávání. Všimněte si, že jeho chování se může mezi verzemi MySQL měnit.
Syntaxe
Syntaxe vypadá takto:
WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [příznaky])
Kde str
je vstupní řetězec. Volitelný AS
klauzule umožňuje přetypovat vstupní řetězec na daný typ a délku. Volitelné flags
argument se v současnosti v MySQL (od verze 8.0) nepoužívá.
Příklad 1 – Základní použití
Zde je základní příklad použití pomocí nebinárního vstupního řetězce:
SELECT HEX(WEIGHT_STRING('Cat'));
Výsledek:
+---------------------------+| HEX(WEIGHT_STRING('Kočka')) |+---------------------------+| 1C7A1C471E95 |+---------------------------+
Všimněte si, že používám HEX()
funkci pro zobrazení WEIGHT_STRING()
výsledek. Důvodem je WEIGHT_STRING()
vrací binární výsledek. Můžeme použít HEX()
k zobrazení výsledku ve formě pro tisk.
Pokud nepoužívám HEX()
v tomto příkladu dostanu toto:
SELECT WEIGHT_STRING('Cat');
Výsledek:
+----------------------+| WEIGHT_STRING('Kočka') |+----------------------+| zG? |+----------------------+
Aby bylo jasno, zde je řetězec, hexadecimální reprezentace tohoto řetězce a hexadecimální reprezentace jeho váhového řetězce:
SET @str ='Cat';SELECT @str, HEX(@str), HEX(WEIGHT_STRING(@str));
Výsledek:
+------+-----------+--------------------------+ | @str | HEX(@str) | HEX(WEIGHT_STRING(@str)) |+------+-----------+--------------------- -----+| Kočka | 436174 | 1C7A1C471E95 |+------+-----------+--------------------------+Příklad 2 – Klauzule AS
Zde je příklad použití
AS
klauzule k přetypování vstupního řetězce na daný typ a délku.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))) 'Binární 3', HEX(WEIGHT_STRING(@str AS BINARY(8))) 'Binární 8';Výsledek:
+--------------+--------------+-----------+----- -------------+| Char 3 | Char 8 | Binární 3 | Binární 8 |+--------------+--------------+----------+----- -------------+| 1C7A1C471E95 | 1C7A1C471E95 | 436174 | 4361740000000000 |+--------------+--------------+----------+------ ------------+Příklad 3 – Porovnání
Následující dva příklady ukazují, jak může mít řetězec různou váhu v závislosti na použitém řazení. Řazení použité v prvním příkladu nerozlišuje přízvuk a nerozlišuje malá a velká písmena. Řazení použité v druhém příkladu je citlivé na akcent a velká a malá písmena.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_ai_ci;SET @lower =lcase(@upper);SELECT @upper 'Řetězec', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@horní)) 'Hmotnost String'UNION ALLSELECT @nižší, HEX(@nižší), HEX(WEIGHT_STRING(@nižší));Výsledek:
+--------+--------+---------------+| Řetězec | Hexadecimální | Zátěžová šňůra |+--------+--------+---------------+| KOČKA | 434154 | 1C7A1C471E95 || kočka | 636174 | 1C7A1C471E95 |+--------+--------+---------------+A zde je stejný příklad, s výjimkou řazení, ve kterém se rozlišuje přízvuk a velká a malá písmena.
SET @upper =_utf8mb4 'CAT' COLLATE utf8mb4_0900_as_cs;SET @lower =lcase(@upper);SELECT @upper 'String', HEX(@upper) 'Hex', HEX(WEIGHT_STRING(@horní)) 'Hmotnost String'UNION ALLSELECT @nižší, HEX(@nižší), HEX(WEIGHT_STRING(@nižší));Výsledek:
+--------+--------+---------------------------- ------------------+| Řetězec | Hexadecimální | Závaží |+--------+--------+----------------------------- ------------------+| KOČKA | 434154 | 1C7A1C471E950000002000200020000000800080008 || kočka | 636174 | 1C7A1C471E9500000020002000200000000200020002 |+--------+--------+------------------------------ -----------------+