【问题标题】:PHP + MySQL - What column type should be used to store serialized objects?PHP + MySQL - 应该使用什么列类型来存储序列化对象?
【发布时间】:2017-12-08 03:46:26
【问题描述】:

使用 PHP,我将序列化的对象存储在 MySQL 数据库中。

我应该使用什么列类型?我目前正在使用“LONGTEXT”,因为它基本上是一个字符串。

它正在工作,但我担心较大的对象可能无法正确保存。

我应该使用什么列类型?

【问题讨论】:

  • 不得不怀疑不序列化是否真的更有意义,并将它们放在规范化的表结构中。
  • 为什么?因为长度限制?
  • 这是一个因素,另一个因素是搜索和索引列的能力,您可以更轻松地查看关系,最终可以减少重复数据等。列表还在继续。
  • 是的,你这么说可能是对的。我可能必须将一些数据存储在表中才能运行查询。我只是想了解在什么情况下可以存储序列化对象。

标签: php mysql serialization


【解决方案1】:

始终使用 BLOB 类型来存储序列化对象。

使用 MEDIUMBLOB 或仅使用 BLOB,只要这些类型足以存储您的序列化数据即可。

BLOB 类型保存较大的对象并且是二进制安全的。

阅读更多关于BLOB

【讨论】:

  • 一个二进制大对象列,最大长度为 16777215 (2^24 - 1) 个字符。最大长度为 4294967295 (2^32 - 1) 个字符的二进制大对象列。 BLOB 最多可以为 65535 字节。如果您需要更多,请考虑将 MEDIUMBLOB 用于 16777215 字节或 LONGBLOB 用于 4294967295 字节。
  • 这取决于你的序列化方法。 JSON 是 UTF-8,应该这样存储,而 MySQL 5.6 有一个JSON 列类型。
【解决方案2】:

BLOB,可以保存各种类型的数据。

https://dev.mysql.com/doc/refman/5.7/en/blob.html

这是我最近用于在数据库中存储对象的列类型。

希望对你有帮助

【讨论】:

  • 谢谢!使用 LONGBLOB,你知道什么是长度限制吗?
  • 我的假设是你不需要 LONGBLOB,它的大小限制是 4GB
  • 谢谢!你知道我在哪里可以找到每个 BLOB 的大小限制吗?
  • 可以在这个问题中找到一个很好的答案:stackoverflow.com/questions/5775571/…
  • 如果您现在需要的所有内容都已排序,请将我的答案标记为正确。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2012-10-17
  • 2011-07-24
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多