Data too long for column 'body' at row 1

Помогите решить проблему.

Есть поле в базе типа TEXT(MySQL)
Если сохраняю этот текст через phpMyAdmin - он прекрасно сохраняется в базе.
Если вставляю в текстовое поле в своей webapp то вылетает такая ошибка

Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'body' at row 1

Тип текст ведь не ограничен по какой либо длиннеа обычно такая ошибка вылетает если превышена максимальная длина ввода.

webapp написана на java + hibermate. Кто сталкивался с подобным? Из-за чего такое может быть?

1 ответов


Бока могут быть из-за несоответствия кодировок базы и кодировок соединения, что маловероятно.

Поле типом текст может хранить 65535 (2^16 - 1) символов, т.е примерно 64 килобайта.

В данной ситуации получается что в базе хранится текст размером до 64к, попадает в клиентскую сторону, отправляется назад и когда сохраняется то уже больше 64к.

Вот именно в месте перед сохранением советую вывести значение поля body в лог файл или консоль и сравнить значение в базе и значение из программы - думаю тут все и решится.

Если какая то транформация текста происходит(хотя странно, обычно текст может уменьшаться в размере фильтрами ,вырезка html и тп) и она нужна то можно изменить тип поля на MEDIUMTEXT который уже может хранить намного больше текста 16777215 (2^24 - 1) символов. Ну и в крайнем случае LONGTEXT(счет уже на гигабайты, такого текста наврядли найдешь)