Jedną z wielu funkcji w MySQL jest LENGTH() funkcja, która zwraca długość łańcucha mierzoną w bajtach.
Przykład:
SELECT LENGTH('Lit');
Wynik:
+---------------+
| LENGTH('Lit') |
+---------------+
| 3 |
+---------------+
To jest prosty przykład, a wynik jest taki sam, jak gdybyśmy użyli CHAR_LENGTH() funkcjonować. Jednak LENGTH() funkcja może zwracać różne wyniki w zależności od typu danych.
Typy danych
Kiedy wysyłasz zapytanie do bazy danych, LENGTH() funkcja może zwrócić inny wynik, w zależności od typu danych. Ciągi Unicode zwracają podwójną liczbę bajtów. Ciągi znaków UTF-8 mogą się różnić.
Oto przykład użycia UTF-8:
SELECT LENGTH(_utf8 '€');
Wyniki:
+---------------------+ | LENGTH(_utf8 '€') | +---------------------+ | 3 | +---------------------+
W tym przypadku znak Euro wykorzystuje 3 bajty.
W poniższym przykładzie wysyłamy zapytanie do bazy danych. W tym przypadku ArtistName kolumna używa varchar(255) typ danych:
SELECT LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Wynik wygląda więc tak:
+--------------------+ | LENGTH(ArtistName) | +--------------------+ | 3 | +--------------------+
Jeśli jednak zmienimy kolumnę na ucs2 , każdy znak będzie reprezentowany przez 2-bajtowy kod Unicode, a zatem wynik będzie inny.
Aby to zademonstrować, możemy zmienić tabelę w następujący sposób:
SELECT LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Teraz, jeśli zapytamy o to ponownie:
SELECT LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Wynik:
+--------------------+ | LENGTH(ArtistName) | +--------------------+ | 6 | +--------------------+
Puste końcowe
LENGTH() funkcja zlicza końcowe spacje (takie jak spacje na końcu ciągu). Więc jeśli dodamy spację na końcu pierwszego przykładu, otrzymamy następujący wynik:
SELECT LENGTH('Lit');
Wynik:
+----------------+
| LENGTH('Lit ') |
+----------------+
| 4 |
+----------------+
Białe puste miejsca
Ten sam wynik otrzymujemy z wiodącymi spacjami (np. spacją na początku łańcucha):
SELECT LENGTH('Lit');
Wynik:
+----------------+
| LENGTH('Lit ') |
+----------------+
| 4 |
+----------------+
Transact-SQL (dla SQL Server, Azure) ma podobną funkcję, ale w T-SQL nazywa się DATALENGTH() .