数据库无法保存大型内容
Posted
技术标签:
【中文标题】数据库无法保存大型内容【英文标题】: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
【问题讨论】:
我想你可以在这里得到完美的解决方案..***.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 个字符的长度。
因此,如果您的要求超出这些限制,您应该选择能够处理更大负载的类型,例如 MEDIUMBLOB
和 LONGBLOB
,它们可以分别处理高达 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 希望它有助于更好地理解,谢谢建议以上是关于数据库无法保存大型内容的主要内容,如果未能解决你的问题,请参考以下文章