【问题标题】:Database can't save large content数据库无法保存大型内容
【发布时间】:2017-01-06 04:58:57
【问题描述】:

我有一张桌子post

 字段 |类型
---------------------------------
   编号 |诠释 A_I P_K
   标题 | varchar(300)
   内容 |正文

当我插入 content 超过 15k 字的行时,我的数据库只保存了 10k 字,而我丢失了 5k 字。

我该如何解决这个问题?

我正在使用 MySQL 和 PHP 框架 Laravel 5.1

【问题讨论】:

  • 我想你可以在这里得到完美的解决方案..stackoverflow.com/questions/6766781/…
  • 这也是我真正讨厌 MySQL 的地方之一。并不是说它有限制,而是它默默地接受并截断数据。它应该无法进行插入以保持数据健全。如果您保存 JSON 或文件数据,情况会变得更糟,因为您现在保存的数据会因数据丢失而损坏。

标签: php mysql database laravel


【解决方案1】:

如果您阅读MySQL docs on TEXT type 或任何其他数据类型,您会发现每种类型的限制。

例如,TEXT 特别有一个大约 65K 的限制,但是这个限制可以根据字符编码(例如 UTF-8 或其他多字节编码)减少,因为它是按字节计算的,而不是按字符计算的。

最大长度为 65,535 (216 − 1) 个字符的 TEXT 列。如果值包含多字节字符,则有效最大长度会更小。每个 TEXT 值都使用 2 字节长度前缀存储,该前缀指示值中的字节数。

可以为这种类型指定一个可选的长度 M。如果这样做了,MySQL 会将该列创建为最小的 TEXT 类型,其大小足以容纳 M 个字符的长度。

因此,如果您的要求超出这些限制,您应该选择能够处理更大负载的类型,例如 MEDIUMBLOBLONGBLOB,它们可以分别处理高达 16M 和 4G。

【讨论】:

    【解决方案2】:

    代替类型 -> TEXT(65535 个字符) 使用类型 -> MEDIUMTEXT(女巫可以包含 1600 万个字符)

    【讨论】:

      【解决方案3】:

      存储在数据库中的字段类型,为您提供类似于“小型”车间、实验室、“中型”工厂、“大型”工厂等“长”的空间

      但要明智地选择,因为“空间”有时会占用比所需更多的资源。为它的目的使用字段类型。

            Type | Maximum length
      -----------+-------------------------------------
        TINYTEXT |           255 (2^8 −1) bytes
            TEXT |        65,535 (2^16−1) bytes = 64 KiB
      MEDIUMTEXT |    16,777,215 (2^24−1) bytes = 16 MiB
        LONGTEXT | 4,294,967,295 (2^32−1) bytes =  4 GiB
      

      【讨论】:

      • 解释你的答案代码会提高它的价值。
      • @zx485 希望它有助于更​​好地理解,谢谢建议
      猜你喜欢
      • 2011-02-20
      • 2012-03-25
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      相关资源
      最近更新 更多