MySQL文本列被截断
问题描述:
我有一个MySQL数据库,其中我将一堆文本信息存储到数据库的文本字段中。该栏目是MySQL文本列被截断
名称:信息
类型:文本
校对:utf8_general_ci
我有一个用户接入〜的信息64KB进入该领域,它怪胎。它会截断最后3个字符。在这种情况下,它恰好是选项卡的结尾,因此它将页面上的所有内容都关闭。如果我手动进入数据库并删除几个字母并添加后面,那么下次我去编辑它时,最后3个将再次被删除。
phpMyAdmin是说明该字段为长而可能无法编辑。所以我试图在我的cms页面上编辑它,我仍然收到相同的结果。
是否有在MySQL中的单个数据库文本列任何已知的问题与此多少数据?它似乎不应该有。
答
我觉得一个MySQL文本字段的最大尺寸小于2^16字节。使用UTF-8编码,这可能意味着更少的字符。您可以将MEDIUMTEXT用于2^24或将LONGTEXT用于2^32个字节,有关详细信息,请参阅MySQL-Docs。
啊,而且一定要检查你的max_allowed_packet
大小。
答
有这个东西叫做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
答
我的理解是文本有65000的最大值字节和大于该值的任何内容都将被截断。这似乎解释你的情况。你说你的用户输入的是64kb左右,是否可以超过65kb,只有几个字节?
考虑使用BLOB。
答
你一定要记住,文本有65,535个字符最多。如果您的内容超过64K字节,则可能超出字段字符的限制。我建议将您的列类型更改为MEDIUMTEXT或LONGTEXT,看看是否可以解决您的问题。
我没有意识到MySQL中有不同的文本类型。 – corymathews 2009-08-28 14:36:00
LONGTEXT而不是BIGTEXT – SysHex 2015-01-21 22:14:50
谢谢,SysHex,你当然是对的。我纠正了这一点。 – 2015-01-23 08:23:42