MySQL文本列被截断

10

我有一个MySQL数据库,将一大堆文本信息存储到数据库中的Text字段中。该列如下:

名称:info
类型:text
排序规则:utf8_general_ci

我让用户向该字段插入了约64kb的信息,但系统出现了问题。它会截断最后3个字符。在这种情况下,它恰好是制表符的结尾,因此它会破坏页面上它之后的所有内容。如果我手动进入数据库然后删除几个字母并重新添加它,那么下次编辑时这最后3个字符将再次被删除。

phpmyadmin指出该字段太长,可能无法编辑。因此,我尝试在我的CMS页面上进行编辑,但仍然收到相同的结果。

是否有已知的问题会导致单个数据库文本列中出现这么多数据的问题?看起来不应该有问题。

4个回答

15

我认为 MySQL TEXT 字段的最大大小小于 2^16 字节。当使用 UTF-8 编码时,这意味着字符数甚至更少。你可以使用 MEDIUMTEXT 来支持 2^24 字节或者使用 LONGTEXT 来支持 2^32 字节,详见MySQL-Docs

另外,请确保检查你的max_allowed_packet大小设置。


7
我没有意识到 MySQL 中有不同的文本类型。 - corymathews
LONGTEXT instead of BIGTEXT - SysHex
1
谢谢,SysHex,你当然是对的。我已经纠正了它。 - cg.

6

请注意,文本的最大长度为65,535个字符。如果您的内容超过64K字节,可能会超出字段字符限制。我建议将您的列类型更改为MEDIUMTEXT或LONGTEXT,并查看是否解决了您的问题。


0

我的理解是TEXT的最大值为65,000字节,任何大于此值的内容都将被截断。这似乎可以解释你的情况。你说你的用户输入了约64kb的内容,可能会超过65kb,多出三个字节吗?

考虑使用BLOB。


-3

有一个叫做文档的东西,它说数据类型所需的存储空间为:

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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接