V MySQL, OCTET_LENGTH() Funkce vrací délku řetězce měřenou v bajtech.
Tato funkce je ve skutečnosti synonymem pro LENGTH() .
Syntaxe
Základní syntaxe vypadá takto:
OCTET_LENGTH(str)
Kde str je řetězec, pro který chcete vrátit délku.
Příklad
SELECT OCTET_LENGTH('Cat');
Výsledek:
+---------------------+
| OCTET_LENGTH('Cat') |
+---------------------+
| 3 |
+---------------------+
To je stejný výsledek, jaký bychom dostali, kdybychom použili CHAR_LENGTH() funkce. Nicméně OCTET_LENGTH() funkce může vrátit různé výsledky v závislosti na typu dat.
Typy dat
Při dotazu na databázi se zobrazí OCTET_LENGTH() funkce může vrátit jiný výsledek v závislosti na typu dat. Řetězce Unicode vrátí dvojnásobný počet bajtů. Řetězce UTF-8 se mohou lišit.
Zde je příklad použití UTF-8:
SELECT CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Výsledky:
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
V tomto případě je délka znaku 1, ale délka oktetu je 3 bajty.
V následujícím příkladu se dotazujeme na databázi. V tomto případě ArtistName sloupec používá varchar(255) datový typ:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Výsledek tedy vypadá takto:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 3 | +--------------------------+
Pokud však změníme sloupec na ucs2 , každý znak bude reprezentován 2bajtovým kódem Unicode, a proto bude výsledek jiný.
Pro demonstraci můžeme tabulku upravit takto:
SELECT OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Nyní, když se na to znovu zeptáme:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Výsledek:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Koncové mezery
OCTET_LENGTH() funkce počítá koncové mezery (jako jsou mezery na konci řetězce). Pokud tedy přidáme mezeru na konec prvního příkladu, dostaneme následující výsledek:
SELECT LENGTH('Cat ');
Výsledek:
+----------------+
| LENGTH('Cat ') |
+----------------+
| 4 |
+----------------+
Hlavní mezery
Stejného výsledku dosáhneme s úvodními mezerami (např. mezerami na začátku řetězce):
SELECT LENGTH(' Cat');
Výsledek:
+----------------+
| LENGTH(' Cat') |
+----------------+
| 4 |
+----------------+
Pokud samozřejmě nepoužíváme funkci jako TRIM() , RTRIM() nebo LTRIM() pro oříznutí mezer.
Příklad:
SELECT LENGTH(RTRIM('Cat '));
Výsledek:
+-----------------------+
| LENGTH(RTRIM('Cat ')) |
+-----------------------+
| 3 |
+-----------------------+
Další příklady
Zde je několik příkladů různých řetězců:
SELECT
OCTET_LENGTH('Quiet Riot') AS 'Result 1',
OCTET_LENGTH('') AS 'Result 2',
OCTET_LENGTH('1234 7') AS 'Result 3',
OCTET_LENGTH(' ') AS 'Result 4',
OCTET_LENGTH(TRIM(' ')) AS 'Result 5';
Výsledek:
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Všimněte si, že výsledky 4 a 5 se liší, protože jsem použil TRIM() funkce pro oříznutí bílých znaků od výsledku 5. Vzhledem k tomu, že řetězec se skládá pouze z bílých znaků, délka oříznutého řetězce je 0 .
Transact-SQL (pro SQL Server, Azure) má podobnou funkci jako LENGTH() MySQL a OCTET_LENGTH() funkcí, ale v T-SQL se to nazývá DATALENGTH() .