БлогNot. Почему всё-таки "обрезается" содержимое textarea при отправке данных

Почему всё-таки "обрезается" содержимое textarea при отправке данных

Речь идёт об обычной отправке данных из формы HTML в базу MySQLi методом POST.

Нет, в моём случае от конкретного браузера это не зависело, от версии Apache тоже, и "злые хостеры" не ставили ограничений на своей стороне, потому что проблема вопроизводилась и локально.

Например, сгенерировав порядка 200 Кб текста, я увидел, что после его вставки в текстовое многострочное поле textarea без указанного атрибута maxlength (так как это был админский режим) на сервер "приехало" только 120 Кб.

На самом деле проблема имеет место на стороне MySQL, когда в базе ISAM указано поле типа text, куда потом идут данные из нашего textarea.

Таблицы MyISAM в MySQL имеют максимальный размер строки 65535 байт, поэтому все данные должны соответствовать этому пределу. Однако величины типа text хранятся вне самой таблицы и вносят от 1 до 4 байтов в этот предел. Подробности можно найти в страшных недрах мануалов вроде MySQL Manual – Data Storage Requirements chapter.

Плюс используйте в структуре базы "большие" тексты вместо привычного text:

TEXT 		65,535 bytes 		~64kb
MEDIUMTEXT 	16,777,215 bytes 	~16MB
LONGTEXT 	4,294,967,295 bytes 	~4GB

И всё равно нужно соблюдать 2 правила при работе с многострочными полями ввода:

1. Ставить атрибут максимальной длины ввода в textarea, например, maxlength="64000"

2. Отслеживать, сколько юзер уже ввёл, даже если он админ :) Примерно как вот здесь, только при "полном заполнении" ещё особо выделять, что поле заполнено полностью.

Нужно также учесть, что с увеличением размера "разрешённого" в textarea текста могут вступить в силу ограничения PHP, такие как post_max_size.

27.02.2021, 23:26 [505 просмотров]


теги: html ошибка mysql