Текстовая колонка MySQL усекается - PullRequest
10 голосов
/ 28 августа 2009

У меня есть база данных MySQL, в которой я храню кучу текстовой информации в текстовом поле в базе данных. Столбцы

Имя: информация
Тип: текст
Сортировка: utf8_general_ci

У меня был пользователь, вставивший ~ 64 КБ информации в поле, и он вышел из себя. Это обрезает последние 3 символа. Который в этом случае оказывается окончанием для вкладки, поэтому он запутывает все после этого на странице. Если я вручную захожу в базу данных, удаляю пару писем и добавляю обратно, то в следующий раз, когда я пойду редактировать ее, последние 3 будут удалены снова.

phpmyadmin утверждает, что поле слишком длинное и может быть недоступно для редактирования. Поэтому я попытался отредактировать его на своей странице CMS, и я все еще получил тот же результат.

Есть ли известные проблемы с таким большим количеством данных в одном текстовом столбце базы данных в mysql? Кажется, не должно быть.

Ответы [ 4 ]

14 голосов
/ 28 августа 2009

Я думаю, что максимальный размер поля MySQL TEXT меньше 2 ^ 16 байт. Используя кодировку UTF-8, это может означать еще меньше символов. Вместо этого вы можете использовать MEDIUMTEXT для 2 ^ 24 или LONGTEXT для 2 ^ 32 байта, см. Подробности в MySQL-Docs .

Ах, и обязательно проверьте размер max_allowed_packet.

5 голосов
/ 28 августа 2009

Вы должны помнить, что текст имеет максимум 65 535 символов. Если ваш контент превышает 64 Кбайт, возможно, вы превышаете лимит полевых символов. Я предлагаю изменить тип столбца на MEDIUMTEXT или LONGTEXT и посмотреть, решит ли это вашу проблему.

0 голосов
/ 28 августа 2009

Насколько я понимаю, TEXT имеет максимальное значение 65 000 байт, и все, что больше этого, будет усечено. Это могло бы объяснить вашу ситуацию. Вы говорите, что ваш пользователь вводит около 64 КБ, это может быть чуть более 65 КБ, с помощью нескольких (трех) байтов?

Рассмотрите возможность использования BLOB.

0 голосов
/ 28 августа 2009

Существует такая вещь, которая называется документация , в которой говорится, что для типов данных требуется хранилище:

BLOB, TEXT  L + 2 bytes, where L <  2^16
MEDIUMBLOB, MEDIUMTEXT  L + 3 bytes, where L <  2^24
LONGBLOB, LONGTEXT  L + 4 bytes, where L <  2^32

Обратите внимание, что 2 ^ 16 == 65536

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...