【问题标题】:MySQL Text Column being truncatedMySQL文本列被截断
【发布时间】:2009-08-28 13:40:17
【问题描述】:

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

名称:信息
类型:文本
排序规则:utf8_general_ci

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

phpmyadmin 声明该字段太长并且可能不可编辑。因此,我尝试在我的 cms 页面上对其进行编辑,但仍然收到相同的结果。

mysql 的单个数据库文本列中的这么多数据是否存在任何已知问题?好像不应该有。

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

    啊,请务必检查您的max_allowed_packet 大小。

    【讨论】:

    • 我没有意识到 MySQL 中有不同的文本类型。
    • LONGTEXT 而不是 BIGTEXT
    • 谢谢,SysHex,你当然是对的。我更正了。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      考虑使用 BLOB。

      【讨论】:

        【解决方案4】:

        有一个东西叫documentation,说datatypes需要的存储是:

        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

        【讨论】:

          猜你喜欢
          • 2010-12-03
          • 2021-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-30
          相关资源
          最近更新 更多