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()
.