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

Co je CHAR_LENGTH() v MySQL?

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.


  1. Získejte den z data v PostgreSQL

  2. Jak mohu vybrat ze seznamu hodnot v SQL Server

  3. Převést „datetime“ na „čas“ v SQL Server (příklady T-SQL)

  4. Problém hibernace s Oracle Trigger pro generování ID ze sekvence