MySQL文本列被截断

时间:2009-08-28 13:40:18

标签: mysql

我有一个MySQL数据库,我在其中将一堆文本信息存储到数据库的Text字段中。列是

姓名:信息
输入:文字
整理:utf8_general_ci

我有一个用户在该字段中插入了大约64kb的信息,它吓坏了。它将截断最后3个字符。在这种情况下恰好是选项卡的结尾,因此它会在页面上将其后的所有内容搞砸。如果我手动进入数据库并删除几个字母并添加背面,那么下次我去编辑它时,最后3个将被删除。

phpmyadmin声明该字段很长并且可能无法编辑。所以我试着在我的cms页面上编辑它,我仍然收到相同的结果。

在mysql的单个数据库文本列中是否存在这么多数据的已知问题?它似乎不应该存在。

4 个答案:

答案 0 :(得分:14)

我认为MySQL TEXT字段的最大大小小于2 ^ 16字节。使用UTF-8编码,这意味着更少的字符。您可以将MEDIUMTEXT用于2 ^ 24或LONGTEXT用于2 ^ 32字节,有关详细信息,请参阅MySQL-Docs

啊,请务必检查max_allowed_packet尺寸。

答案 1 :(得分:5)

你必须记住,TEXT最多有65,535个字符。如果您的内容超过64K字节,则可能超出字段字符的限制。我建议您将列类型更改为MEDIUMTEXT或LONGTEXT,看看是否能解决您的问题。

答案 2 :(得分:0)

我的理解是TEXT的最大值为65,000字节,任何大于该字节的内容都将被截断。这似乎可以解释你的情况。你说你的用户输入大约64kb,可能只是超过65kb,只有几(3)个字节?

考虑使用BLOB。

答案 3 :(得分:-2)

有一个名为documentation的东西,说数据类型所需的存储空间是:

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