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