W MySQL OCTET_LENGTH()
funkcja zwraca długość ciągu mierzoną w bajtach.
Ta funkcja jest właściwie synonimem LENGTH()
.
Składnia
Podstawowa składnia wygląda następująco:
OCTET_LENGTH(str)
Gdzie str
jest ciągiem, dla którego ma być zwrócona długość.
Przykład
SELECT OCTET_LENGTH('Cat');
Wynik:
+---------------------+ | OCTET_LENGTH('Cat') | +---------------------+ | 3 | +---------------------+
Jest to ten sam wynik, który otrzymalibyśmy, gdybyśmy użyli CHAR_LENGTH()
funkcjonować. Jednak OCTET_LENGTH()
funkcja może zwracać różne wyniki w zależności od typu danych.
Typy danych
Kiedy wysyłasz zapytanie do bazy danych, OCTET_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 CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Wyniki:
+--------------------------+---------------------------+ | CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') | +--------------------------+---------------------------+ | 1 | 3 | +--------------------------+---------------------------+
W tym przypadku długość znaku wynosi 1, ale długość oktetu to 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 OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Wynik wygląda więc tak:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 3 | +--------------------------+
Jeśli jednak zmienimy kolumnę na ucs2
, każdy znak będzie reprezentowany przez 2-bajtowy kod Unicode, dlatego wynik będzie inny.
Aby to zademonstrować, możemy zmienić tabelę w następujący sposób:
SELECT OCTET_LENGTH(ArtistName) ALTER TABLE Artists MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
Teraz, jeśli zapytamy o to ponownie:
SELECT OCTET_LENGTH(ArtistName) FROM Artists WHERE ArtistName = 'Lit';
Wynik:
+--------------------------+ | OCTET_LENGTH(ArtistName) | +--------------------------+ | 6 | +--------------------------+
Bluzy końcowe
OCTET_LENGTH()
funkcja zlicza końcowe spacje (takie jak spacje na końcu ciągu). Jeśli więc dodamy spację na końcu pierwszego przykładu, otrzymamy następujący wynik:
SELECT LENGTH('Cat ');
Wynik:
+----------------+ | LENGTH('Cat ') | +----------------+ | 4 | +----------------+
Pierwsze puste miejsca
Ten sam wynik otrzymujemy z wiodącymi spacjami (np. spacjami na początku łańcucha):
SELECT LENGTH('Cat ');
Wynik:
+----------------+ | LENGTH(' Cat') | +----------------+ | 4 | +----------------+
O ile oczywiście nie używamy funkcji takiej jak TRIM()
, RTRIM()
lub LTRIM()
aby przyciąć białe znaki.
Przykład:
SELECT LENGTH(RTRIM('Cat '));
Wynik:
+-----------------------+ | LENGTH(RTRIM('Cat ')) | +-----------------------+ | 3 | +-----------------------+
Więcej przykładów
Oto kilka przykładów różnych ciągów:
SELECT OCTET_LENGTH('Quiet Riot') AS 'Result 1', OCTET_LENGTH('') AS 'Result 2', OCTET_LENGTH('1234 7') AS 'Result 3', OCTET_LENGTH(' ') AS 'Result 4', OCTET_LENGTH(TRIM(' ')) AS 'Result 5';
Wynik:
+----------+----------+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 | +----------+----------+----------+----------+----------+ | 10 | 0 | 7 | 3 | 0 | +----------+----------+----------+----------+----------+
Zauważ, że wyniki 4 i 5 są różne, ponieważ użyłem funkcji TRIM()
funkcja przycinania białych znaków z wyniku 5. Biorąc pod uwagę, że ciąg składa się tylko z białych znaków, długość przyciętego ciągu wynosi 0
.
Transact-SQL (dla SQL Server, Azure) ma podobną funkcję do LENGTH()
MySQL i OCTET_LENGTH()
funkcji, ale w T-SQL nazywa się to DATALENGTH()
.