Почему всё-таки "обрезается" содержимое 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 [916 просмотров]