Сколько байт занимает текст: калькулятор размера для MySQL
Вы копируете статью в базу данных MySQL, а она выдаёт ошибку: «Data too long for column». Или загружаете текст в поле с ограничением 65 535 байт, а он не влезает, хотя символов вроде немного. Причина — в различии между символами и байтами. Один русский символ в UTF-8 занимает 2 байта, эмодзи — 4 байта, а латинская буква — 1 байт [citation:18].
Вот как посчитать точный размер текста и не ошибиться с выбором типа поля в MySQL. А в конце — бесплатный калькулятор Vibes, который считает байты в реальном времени.
Почему символы и байты — не одно и то же
Когда вы смотрите на текст в редакторе, вы видите символы. Когда база данных принимает текст, она считает байты. Это разные единицы измерения.
В кодировке UTF-8 (стандарт для современных сайтов и баз данных) размер символа зависит от его типа [citation:18]:
— Латинские буквы и цифры — 1 байт на символ. «Hello» = 5 байт;
— Кириллица — 2 байта на символ. «Привет» = 12 байт (6 символов × 2) [citation:5];
— Китайские иероглифы — 3 байта на символ. «你好» = 6 байт [citation:9];
— Эмодзи — 4 байта на символ. «🔥» = 4 байта [citation:9].
Если вы пишете статью на русском, размер в байтах будет примерно в 2 раза больше, чем количество символов. Статья на 10 000 символов займёт около 20 000 байт.
Зачем это знать при работе с MySQL
MySQL хранит текст в полях разных типов, и у каждого типа есть лимит в байтах. Если текст не влезает — вы получите ошибку или обрезанные данные.
Основные типы текстовых полей в MySQL:
— TINYTEXT — до 255 байт. Примерно 127 русских символов;
— TEXT — до 65 535 байт. Примерно 32 700 русских символов;
— MEDIUMTEXT — до 16 777 215 байт. Примерно 8 300 000 русских символов;
— LONGTEXT — до 4 294 967 295 байт. Практически без ограничений.
Если вы создаёте поле TEXT для статьи, а статья на русском занимает 40 000 символов — в байтах это будет 80 000, что превышает лимит TEXT. База данных обрежет текст или выдаст ошибку. Нужно использовать MEDIUMTEXT.
Как проверить реальный размер текста в байтах в MySQL:
Используйте функцию LENGTH(). Она возвращает длину строки в байтах [citation:16]. Например:
SELECT LENGTH(content) FROM blog_posts WHERE id = 1;
Эта команда покажет, сколько байт занимает текст в поле content. Если результат превышает лимит типа поля — текст был обрезан при вставке.
Для сравнения: функция CHAR_LENGTH() возвращает количество символов, а не байт [citation:8]. На русском тексте LENGTH() покажет примерно в 2 раза больше, чем CHAR_LENGTH().
Пошаговая инструкция: как посчитать байты текста
Шаг 1. Откройте калькулятор Vibes
Перейдите на /tools в разделе инструментов. Найдите «Калькулятор размера текста». Это бесплатный инструмент, работает прямо в браузере, ничего устанавливать не нужно.
Шаг 2. Вставьте текст
Скопируйте статью, описание товара, SEO-текст или любой фрагмент, размер которого нужно проверить. Вставьте в текстовое поле калькулятора.
Шаг 3. Посмотрите результат
Калькулятор покажет:
— количество символов — сколько знаков в тексте;
— размер в байтах — сколько места займёт текст в базе данных;
— размер в КБ — если текст большой, для удобства.
Например, текст «Привет мир» содержит 10 символов, но занимает 19 байт в UTF-8, потому что каждая русская буква — 2 байта, а пробел — 1 [citation:1].
Шаг 4. Сравните с лимитом поля MySQL
Если вы готовите текст для загрузки в MySQL, сравните полученный размер с лимитом типа поля:
— TINYTEXT: 255 байт;
— TEXT: 65 535 байт;
— MEDIUMTEXT: 16 777 215 байт.
Если размер близок к лимиту — выбирайте тип с запасом. Текст может расшириться при редактировании.
Пример: статья для блога на 10 000 символов
Вы написали статью на русском языке. Редактор показывает 10 000 символов. Вы хотите загрузить её в MySQL.
Считаем байты:
— 10 000 символов × 2 байта = 20 000 байт (плюс пробелы и знаки препинания, которые занимают 1 байт, но их немного);
— реальный размер будет около 19 500–20 500 байт.
Сравниваем с типами полей:
— TINYTEXT (255 байт) — не подходит;
— TEXT (65 535 байт) — подходит, с запасом в 3 раза;
— MEDIUMTEXT — тоже подходит, но избыточно.
Вывод: для статьи на 10 000 русских символов достаточно поля TEXT. Если статья вырастет до 30 000 символов — всё ещё влезает в TEXT (60 000 байт). Если планируете писать статьи на 50 000+ символов — нужен MEDIUMTEXT.
Как не ошибиться с выбором типа поля
Вот простое правило для русскоязычного контента:
— до 100 символов — TINYTEXT или VARCHAR;
— от 100 до 30 000 символов — TEXT;
— от 30 000 до 8 000 000 символов — MEDIUMTEXT;
— больше 8 000 000 символов — LONGTEXT.
Это правило работает, потому что русский текст в UTF-8 занимает примерно в 2 раза больше байт, чем символов. Если добавляете эмодзи — запас должен быть больше. Один эмодзи = 4 байта, то есть в 4 раза больше, чем латинская буква.
Если вы не уверены в размере — используйте калькулятор перед созданием поля. Лучше потратить минуту на проверку, чем потом переносить данные в новую таблицу.
Частые ошибки при работе с текстом в MySQL
— Выбор поля «на глаз». Если вы создаёте поле TEXT для статьи, которая может вырасти до 40 000 символов, — при 80 000 байт она обрежется. Всегда проверяйте размер в байтах, а не в символах;
— Игнорирование эмодзи. Если в тексте есть эмодзи, каждый из них добавляет 4 байта. Статья с 50 эмодзи = +200 байт. Это может стать критичным, если вы близко к лимиту;
— Копирование из Word. Word может вставлять невидимые символы форматирования, которые добавляют байты. Перед вставкой в базу данных очищайте текст через «Блокнот» или калькулятор [citation:9];
— Забыли про кодировку. Если база данных использует не UTF-8, а другую кодировку (например, cp1251), размер в байтах будет другим. Проверьте кодировку таблицы перед загрузкой.
FAQ
Почему «Привет мир» занимает 19 байт, а не 10?
Потому что в UTF-8 каждая русская буква занимает 2 байта, а пробел — 1 байт. «Привет мир» = 9 букв × 2 + 1 пробел × 1 = 19 байт [citation:1].
Как посчитать байты без калькулятора?
Для русского текста в UTF-8: количество символов × 2. Точный результат даст функция LENGTH() в MySQL или калькулятор Vibes. Для текста с эмодзи добавляйте 4 байта за каждый эмодзи [citation:16].
Что делать, если текст не влезает в поле?
Измените тип поля на более вместительный (TEXT → MEDIUMTEXT) или разбейте текст на несколько полей. Не пытайтесь обрезать текст — потеряете данные.
Можно ли использовать VARCHAR для длинных текстов?
VARCHAR подходит для строк до 65 535 байт, но у него есть ограничение по длине строки в MySQL. Для статей лучше использовать TEXT или MEDIUMTEXT. VARCHAR хорош для заголовков, имён, коротких описаний.
Влияет ли размер текста на скорость работы сайта?
Да. Большие тексты в базе занимают место и могут замедлять выборку, если вы загружаете их без необходимости. Если вам нужен только фрагмент — используйте LIMIT в SQL-запросе. Не загружайте весь LONGTEXT, если нужны первые 200 символов.
Что делать дальше
Откройте /tools и проверьте размер вашего текста в калькуляторе Vibes. Это бесплатно и занимает 10 секунд. Если вы готовите контент для загрузки в MySQL — убедитесь, что тип поля соответствует размеру.
Зарегистрируйтесь на /register, чтобы получить доступ ко всем инструментам Vibes: калькулятор размера текста, генератор коротких ссылок, QR-коды и аналитика. На Pro (590₽/мес) — безлимит ссылок, свой домен и API для автоматизации загрузки контента.
Читайте также:
— Как перенести ссылки с другого сервиса без потерь;