Перейти к содержимому
Последнее обновление

LENGTH

Описание​

Функция LENGTH возвращает длину строки в байтах. Эта функция вычисляет количество байтов, которое занимает строка в кодировке UTF-8, а не количество символов.

Обратите внимание на отличие от CHAR_LENGTH:

  • LENGTH() возвращает количество байтов
  • CHAR_LENGTH() и CHARACTER_LENGTH() возвращают количество символов
  • Для символов ASCII количество байтов равно количеству символов
  • Для многобайтовых символов (например, китайских иероглифов и эмодзи) количество байтов обычно превышает количество символов

Псевдоним​

  • OCTET_LENGTH()

Синтаксис​

LENGTH(<str>)

Параметры​

ПараметрОписание
<str>Строка, длину которой в байтах требуется вычислить. Тип: VARCHAR

Возвращаемое значение​

Возвращает значение типа INT, представляющее длину строки в байтах.

Особые случаи:

  • Если параметр равен NULL, возвращает NULL
  • Для пустой строки возвращает 0
  • Результат представляет собой количество байтов в кодировке UTF-8

Примеры​

  1. Символы ASCII (количество байтов = количество символов)
SELECT LENGTH('abc'), CHAR_LENGTH('abc');
+---------------+--------------------+
| LENGTH('abc') | CHAR_LENGTH('abc') |
+---------------+--------------------+
| 3 | 3 |
+---------------+--------------------+
  1. Китайские иероглифы (количество байтов > количество символов)
SELECT LENGTH('中国'), CHAR_LENGTH('中国');
+------------------+---------------------+
| LENGTH('中国') | CHAR_LENGTH('中国') |
+------------------+---------------------+
| 6 | 2 |
+------------------+---------------------+
  1. Обработка значения NULL
SELECT LENGTH(NULL);
+--------------+
| LENGTH(NULL) |
+--------------+
| NULL |
+--------------+
  1. Пустая строка
SELECT LENGTH('');
+------------+
| LENGTH('') |
+------------+
| 0 |
+------------+
  1. Сочетание символов разных типов
SELECT LENGTH('Hello世界'), CHAR_LENGTH('Hello世界');
+-----------------------+----------------------------+
| LENGTH('Hello世界') | CHAR_LENGTH('Hello世界') |
+-----------------------+----------------------------+
| 11 | 7 |
+-----------------------+----------------------------+
  1. Экранированные символы и пробелы ASCII
SELECT LENGTH('\t\n\r'), LENGTH('  ');
+------------------+--------------+
| LENGTH('\t\n\r') | LENGTH(' ') |
+------------------+--------------+
| 3 | 2 |
+------------------+--------------+
  1. Многобайтовые символы UTF-8: сравнение длины в байтах и количества символов
SELECT LENGTH('ṭṛì'), CHAR_LENGTH('ṭṛì');
+--------------------+-------------------------+
| LENGTH('ṭṛì') | CHAR_LENGTH('ṭṛì') |
+--------------------+-------------------------+
| 8 | 3 |
+--------------------+-------------------------+
  1. Эмодзи (обычно 4 байта на глиф)
SELECT LENGTH('😀😁'), CHAR_LENGTH('😀😁');
+--------------------+-------------------------+
| LENGTH('😀😁') | CHAR_LENGTH('😀😁') |
+--------------------+-------------------------+
| 8 | 2 |
+--------------------+-------------------------+
  1. Строки из цифр
SELECT LENGTH('12345'), CHAR_LENGTH('12345');
+-----------------+----------------------+
| LENGTH('12345') | CHAR_LENGTH('12345') |
+-----------------+----------------------+
| 5 | 5 |
+-----------------+----------------------+