sql >> Databáze >  >> RDS >> Mysql

Jak funguje funkce WEIGHT_STRING() v MySQL

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

  1. Rozdělení nových ovladačů ODBC a OLEDB pro Microsoft SQL Server

  2. Funkce MySQL LOG2() – Vrátí základní-2 logaritmus hodnoty

  3. Používejte MySQL relační databáze na CentOS 5

  4. Jak předat heslo do pg_dump?