数据库无法保存大型内容

Posted

技术标签:

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

我有一张桌子post

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

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

我该如何解决这个问题?

我正在使用 MySQLphp 框架 Laravel 5.1

【问题讨论】:

我想你可以在这里得到完美的解决方案..***.com/questions/6766781/… 这也是我真正讨厌 mysql 的地方之一。并不是说它有限制,而是它默默地接受并截断数据。它应该无法进行插入以保持数据健全。如果您保存 JSON 或文件数据,情况会变得更糟,因为您现在保存的数据会因数据丢失而损坏。 【参考方案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 希望它有助于更​​好地理解,谢谢建议

以上是关于数据库无法保存大型内容的主要内容,如果未能解决你的问题,请参考以下文章

在Julia 1.0.0中本地保存大型数字输出到文件

保存大型json数据mongodb

使用 Pandas 在 Python 中处理大型 SQL 查询?

如何在 MATLAB 中创建和保存大型数据集?

macmatlab导入大型csv

Pandas to_csv() 缓慢保存大型数据帧