W MySQL funkcja CHAR_LENGTH()
funkcja zwraca długość ciągu mierzoną w znakach. MySQL ma również CHARACTER_LENGTH()
, który jest synonimem CHAR_LENGTH()
.
Oto przykład:
SELECT CHAR_LENGTH('Lit');
A oto wynik:
+--------------------+ | CHAR_LENGTH('Lit') | +--------------------+ | 3 | +--------------------+
Puste końcowe
Zauważ, że CHAR_LENGTH()
uwzględnia w swoich obliczeniach końcowe spacje (np. spacje na końcu ciągu).
Więc jeśli dodamy spację na końcu poprzedniego przykładu:
SELECT CHAR_LENGTH('Lit ');
Oto wynik:
+---------------------+ | CHAR_LENGTH('Lit ') | +---------------------+ | 4 | +---------------------+
Ale zawsze możemy usunąć tę końcową spację, dodając TRIM()
funkcja w miksie:
SELECT CHAR_LENGTH(TRIM('Lit '));
Oto wynik:
+---------------------------+ | CHAR_LENGTH(TRIM('Lit ')) | +---------------------------+ | 3 | +---------------------------+
Białe puste miejsca
Tak samo jest z wiodącymi blankami. Jeśli więc dodamy spację do początku zamiast tego ciągu:
SELECT CHAR_LENGTH(' Lit');
Otrzymujemy ten sam wynik:
+---------------------+ | CHAR_LENGTH(' Lit') | +---------------------+ | 4 | +---------------------+
Typy danych
Nie ma znaczenia, jaki typ danych jest przechowywany w ciągu, nadal zwróci te same wyniki. Jest to w przeciwieństwie do LENGTH()
funkcja, która zwróci podwójną liczbę znaków w przypadkach, gdy dane są przechowywane jako ciąg Unicode.
W poniższym przykładzie kolumna ArtistName używa varchar(255) :
SELECT CHAR_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Oto wynik:
+-------------------------+ | CHAR_LENGTH(ArtistName) | +-------------------------+ | 3 | +-------------------------+
A jeśli zmodyfikujemy ArtistName
kolumna do używania Unicode:
ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) unicode;
I ponownie uruchom to samo zapytanie:
SELECT CHAR_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Nadal otrzymujemy ten sam wynik:
+-------------------------+ | CHAR_LENGTH(ArtistName) | +-------------------------+ | 3 | +-------------------------+
Jednakże, gdybyśmy użyli LENGTH()
funkcja, wynik byłby 6. Dzieje się tak, ponieważ ciągi Unicode przechowują 2 bajty na znak, a LENGTH()
funkcja zwraca długość mierzoną w bajtach.