Jednou z mnoha funkcí v MySQL je LENGTH()
funkce, která vrací délku řetězce měřenou v bajtech.
Příklad:
SELECT LENGTH('Lit');
Výsledek:
+---------------+ | LENGTH('Lit') | +---------------+ | 3 | +---------------+
Toto je jednoduchý příklad a výsledek je stejný, jako kdybychom použili CHAR_LENGTH()
funkce. Nicméně LENGTH()
funkce může vrátit různé výsledky v závislosti na typu dat.
Typy dat
Při dotazu na databázi 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 LENGTH(_utf8 '€');
Výsledky:
+---------------------+ | LENGTH(_utf8 '€') | +---------------------+ | 3 | +---------------------+
V tomto případě znak Euro používá 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 LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Výsledek tedy vypadá takto:
+--------------------+ | 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 LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Nyní, když se na to znovu zeptáme:
SELECT LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Výsledek:
+--------------------+ | LENGTH(ArtistName) | +--------------------+ | 6 | +--------------------+
Koncové mezery
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('Lit ');
Výsledek:
+----------------+ | LENGTH('Lit ') | +----------------+ | 4 | +----------------+
Hlavní mezery
Stejného výsledku dosáhneme s úvodními mezerami (např. mezerami na začátku řetězce):
SELECT LENGTH(' Lit');
Výsledek:
+----------------+ | LENGTH(' Lit') | +----------------+ | 4 | +----------------+
Transact-SQL (pro SQL Server, Azure) má podobnou funkci, ale v T-SQL se nazývá DATALENGTH()
.