V MySQL je to CHAR_LENGTH()
Funkce vrací délku řetězce měřenou ve znacích. MySQL má také CHARACTER_LENGTH()
, což je synonymum pro CHAR_LENGTH()
.
Zde je příklad:
SELECT CHAR_LENGTH('Lit');
A tady je výsledek:
+--------------------+ | CHAR_LENGTH('Lit') | +--------------------+ | 3 | +--------------------+
Koncové mezery
Všimněte si, že CHAR_LENGTH()
zahrnuje do svých výpočtů koncové mezery (např. mezery na konci řetězce).
Pokud tedy přidáme mezeru na konec předchozího příkladu:
SELECT CHAR_LENGTH('Lit ');
Zde je výsledek:
+---------------------+ | CHAR_LENGTH('Lit ') | +---------------------+ | 4 | +---------------------+
Vždy však můžeme tuto koncovou mezeru odstranit přidáním TRIM()
funkce do mixu:
SELECT CHAR_LENGTH(TRIM('Lit '));
Zde je výsledek:
+---------------------------+ | CHAR_LENGTH(TRIM('Lit ')) | +---------------------------+ | 3 | +---------------------------+
Hlavní mezery
Je to stejné jako s předními prázdnými místy. Pokud tedy přidáme mezeru na start řetězce místo toho:
SELECT CHAR_LENGTH(' Lit');
Dostaneme stejný výsledek:
+---------------------+ | CHAR_LENGTH(' Lit') | +---------------------+ | 4 | +---------------------+
Typy dat
Nezáleží na tom, jaký typ dat je řetězec uložen, bude stále vracet stejné výsledky. To je v kontrastu s LENGTH()
funkce, která vrátí dvojnásobný počet znaků v případech, kdy jsou data uložena jako řetězec Unicode.
V následujícím příkladu používá sloupec ArtistName varchar(255) :
SELECT CHAR_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Zde je výsledek:
+-------------------------+ | CHAR_LENGTH(ArtistName) | +-------------------------+ | 3 | +-------------------------+
A pokud upravíme ArtistName
pro použití Unicode:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
A znovu spusťte stejný dotaz:
SELECT CHAR_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Stále dostáváme stejný výsledek:
+-------------------------+ | CHAR_LENGTH(ArtistName) | +-------------------------+ | 3 | +-------------------------+
Pokud bychom však použili LENGTH()
výsledkem by bylo 6. Je to proto, že řetězce Unicode ukládají 2 bajty na znak a LENGTH()
funkce vrací délku měřenou v bajtech.