W MariaDB, LENGTH()
jest wbudowaną funkcją łańcuchową, która zwraca długość podanego argumentu łańcuchowego.
W trybie domyślnym długość ciągu jest mierzona w bajtach. Ale w trybie Oracle jest to mierzone w znakach.
Składnia
Składnia wygląda tak:
LENGTH(str)
Gdzie str
to ciąg, dla którego zostanie zwrócona długość.
Przykład
Oto podstawowy przykład:
SELECT LENGTH('café');
Wynik:
+-----------------+ | LENGTH('café') | +-----------------+ | 5 | +-----------------+
W tym przypadku ciąg miał cztery znaki, ale LENGTH()
zwrócono 5
.
Dzieje się tak, ponieważ ostatni znak używa dwóch bajtów, a ja używam domyślnego trybu SQL (mój sql_mode=DEFAULT
). W domyślnym trybie SQL LENGTH()
zwraca liczbę bajtów.
Tryb Oracle
Przejście do trybu Oracle powoduje LENGTH()
zwraca tylko liczbę znaków w ciągu (w przeciwieństwie do liczby bajtów).
Przełączmy naszą sesję w tryb Oracle:
SET SESSION sql_mode='ORACLE';
A teraz uruchommy poprzednią LENGTH()
przykład ponownie:
SELECT LENGTH('café');
Wynik:
+-----------------+ | LENGTH('café') | +-----------------+ | 4 | +-----------------+
Tym razem zwraca liczbę znaków (4) zamiast liczby bajtów (5).
W trybie Oracle LENGTH()
zwraca ten sam wynik co CHAR_LENGTH()
i jego synonim, CHARACTER_LENGTH()
.
Porównanie z CHAR_LENGTH()
i BIT_LENGTH()
Wróćmy do trybu domyślnego:
SET SESSION sql_mode=DEFAULT;
Oto szybkie porównanie między LENGTH()
w trybie domyślnym CHAR_LENGTH()
i BIT_LENGTH()
który zwraca liczbę bitów w ciągu:
SELECT
LENGTH('อ'),
CHAR_LENGTH('อ'),
BIT_LENGTH('อ');
Wynik:
+---------------+--------------------+-------------------+ | LENGTH('อ') | CHAR_LENGTH('อ') | BIT_LENGTH('อ') | +---------------+--------------------+-------------------+ | 3 | 1 | 24 | +---------------+--------------------+-------------------+
Ten znak tajski (อ
) używa 3 bajtów, a zatem LENGTH()
zwraca 3
.
CHAR_LENGTH()
zwraca 1
, ponieważ to wciąż tylko jeden znak, a BIT_LENGTH()
zwraca liczbę bitów (24
).
Ponownie, gdybyśmy byli w trybie Oracle, LENGTH()
zwróciłby to samo co CHAR_LENGTH()
.
Nie-Strunowe
Jeśli argument nie jest łańcuchem, jest konwertowany na łańcuch.
Oto kolejny przykład z liczbą:
SELECT LENGTH(1234);
Wynik:
+--------------+ | LENGTH(1234) | +--------------+ | 4 | +--------------+
Argumenty zerowe
Przekazywanie null
zwraca null
:
SELECT LENGTH(null);
Wynik:
+--------------+ | LENGTH(null) | +--------------+ | NULL | +--------------+
Brakujący argument
Wywołanie LENGTH()
bez przekazania argumentu powoduje błąd:
SELECT LENGTH();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LENGTH'