Почему в запросе по длине строки её надо умножать на 2?

В MySQL используется кодировка по умолчанию, которая называется UTF-8. UTF-8 использует переменную длину кодовых точек и может кодировать символы из Unicode.

В Unicode каждый символ представлен кодовой точкой, которая имеет уникальное числовое значение. В UTF-8 символы могут занимать разное количество байтов. Некоторые символы, такие как английский алфавит и основные специальные символы, занимают 1 байт. Однако, для других символов, таких как символы из кириллицы, китайского языка или эмодзи, требуется больше байтов для их представления.

В MySQL умножение на 2 в запросе по длине строки обусловлено тем, что функция LENGTH считает количество байтов, занимаемых строкой, а не количество символов. Поэтому, чтобы получить длину строки в символах, необходимо умножить результат LENGTH на 2, так как символы, требующие больше 1 байта для кодировки, будут занимать 2 или более байта.

В то же время, если вы используете другую кодировку, например, UTF-16, то количество байтов, занимаемых каждым символом, может быть другим. Поэтому в таком случае формула для получения длины строки в символах может быть иной.