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