В MySQL OCTET_LENGTH()
функцията връща дължината на низ, измерена в байтове.
Тази функция всъщност е синоним на LENGTH()
.
Синтаксис
Основният синтаксис е така:
OCTET_LENGTH(str)
Където str
е низът, за който искате да бъде върната дължината.
Пример
SELECT OCTET_LENGTH('Котка');
Резултат:
+---------------------+| OCTET_LENGTH('Котка') |+---------------------+| 3 |+---------------------+
Това е същият резултат, който бихме получили, ако използвахме CHAR_LENGTH()
функция. Въпреки това, OCTET_LENGTH()
функцията може да връща различни резултати в зависимост от типа данни.
Типове данни
Когато правите заявка към база данни, OCTET_LENGTH()
функцията може да върне различен резултат в зависимост от типа данни. Unicode низовете връщат двоен брой байтове. UTF-8 низовете могат да варират.
Ето пример за използване на UTF-8:
ИЗБЕРЕТЕ CHAR_LENGTH(_utf8 '€'), OCTET_LENGTH(_utf8 '€');
Резултати:
+--------------------+------------------- --------+| CHAR_LENGTH(_utf8 '€') | OCTET_LENGTH(_utf8 '€') |+-------------------------+-------------- ------------+| 1 | 3 |+--------------------+-------------------- -------+
В този случай дължината на знака е 1, но дължината на октета е 3 байта.
В следващия пример правим заявка към база данни. В този случай ArtistName
колоната използва varchar(255) тип данни:
SELECT OCTET_LENGTH(Име на изпълнител) FROM ArtistsWHERE ArtistName ='Lit';
Така че резултатът изглежда така:
+-------------------------+| OCTET_LENGTH(Име на изпълнител) |+--------------------------+| 3 |+-------------------------+
Ако обаче променим колоната на ucs2
, всеки знак ще бъде представен с 2 байтов Unicode код и следователно резултатът ще бъде различен.
За да демонстрираме, можем да променим таблицата по следния начин:
ИЗБЕРЕТЕ OCTET_LENGTH(Име на изпълнител) ALTER TABLE Изпълнители ПРОМЕНИ КОЛОНА Име на изпълнител VARCHAR(255) CHARSET ucs2;
Сега, ако го потърсим отново:
SELECT OCTET_LENGTH(Име на изпълнител) FROM ArtistsWHERE ArtistName ='Lit';
Резултат:
+-------------------------+| OCTET_LENGTH(Име на изпълнител) |+--------------------------+| 6 |+-------------------------+
Завършващи празни места
OCTET_LENGTH()
функцията брои крайните празни места (като интервали в края на низа). Така че, ако добавим интервал в края на първия пример, получаваме следния резултат:
SELECT LENGTH('Cat');
Резултат:
+----------------+| LENGTH('Котка') |+----------------+| 4 |+----------------+
Водещи празни места
Получаваме същия резултат с водещи празни места (например интервали в началото на низа):
SELECT LENGTH('Котка');
Резултат:
+----------------+| LENGTH('Котка') |+----------------+| 4 |+----------------+
Освен ако, разбира се, не използваме функция като TRIM()
, RTRIM()
или LTRIM()
за да отрежете празното пространство.
Пример:
ИЗБЕРЕТЕ ДЪЛЖИНА(RTRIM('Котка'));
Резултат:
<пред>+-----------------------+| LENGTH(RTRIM('Котка')) |+-----------------------+| 3 |+-----------------------+Още примери
Ето няколко примера за различни низове:
ИЗБЕРЕТЕ OCTET_LENGTH('Quiet Riot') КАТО 'Резултат 1', OCTET_LENGTH('') КАТО 'Резултат 2', OCTET_LENGTH('1234 7') КАТО 'Резултат 3', OCTET_LENGTH(' ') КАТО 'Резултат 4 ', OCTET_LENGTH(TRIM(' ')) КАТО 'Резултат 5';
Резултат:
+----------+-----------+---------+----------+-- --------+| Резултат 1 | Резултат 2 | Резултат 3 | Резултат 4 | Резултат 5 |+----------+-----------+----------+---------+-- --------+| 10 | 0 | 7 | 3 | 0 |+---------+-----------+---------+----------+--- -------+
Имайте предвид, че резултати 4 и 5 са различни, защото използвах TRIM()
функция за изрязване на празното пространство от резултат 5. Тъй като низът се състои само от празно пространство, дължината на отрязания низ е 0
.
Transact-SQL (за SQL Server, Azure) има подобна функция на LENGTH()
на MySQL и OCTET_LENGTH()
функции, но в T-SQL се нарича DATALENGTH()
.