2009-08-28 138 views
9

我有一个MySQL数据库,其中我将一堆文本信息存储到数据库的文本字段中。该栏目是MySQL文本列被截断

名称:信息
类型:文本
校对:utf8_general_ci

我有一个用户接入〜的信息64KB进入该领域,它怪胎。它会截断最后3个字符。在这种情况下,它恰好是选项卡的结尾,因此它将页面上的所有内容都关闭。如果我手动进入数据库并删除几个字母并添加后面,那么下次我去编辑它时,最后3个将再次被删除。

phpMyAdmin是说明该字段为长而可能无法编辑。所以我试图在我的cms页面上编辑它,我仍然收到相同的结果。

是否有在MySQL中的单个数据库文本列任何已知的问题与此多少数据?它似乎不应该有。

回答

13

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

啊,而且一定要检查你的max_allowed_packet大小。

+6

我没有意识到MySQL中有不同的文本类型。 – corymathews 2009-08-28 14:36:00

+0

LONGTEXT而不是BIGTEXT – SysHex 2015-01-21 22:14:50

+1

谢谢,SysHex,你当然是对的。我纠正了这一点。 – 2015-01-23 08:23:42

0

有这个东西叫做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

0

我的理解是文本有65000的最大值字节和大于该值的任何内容都将被截断。这似乎解释你的情况。你说你的用户输入的是64kb左右,是否可以超过65kb,只有几个字节?

考虑使用BLOB。

5

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