问题描述
在我与 WordPress 的小时代,我看到 WordPress 本身,其友好的插件在许多情况下都使用 PHP serialize()
将数据存储到数据库。但是在最近的一次搜索中,我发现 json_encode()
对 serialize()
的认真的社区支持。
-
证明
json_encode()
的测试优于serialize()
– StackOverflow -
为什么
json_encode()
可以使用的原因,为什么不 – StackOverflow
我亲自测试了一个关联数组,其中显示:
-
serialize()
存储 342 个字符 -
json_encode()
存储 285 个字符
为什么我问这个?
我正在一个项目,而我将存储重复的元字段到一个职位。哪里:
-
数据基本上是英文,但有时可以是孟加拉语
-
数据将是关联数组,3 级深 (我希望我能正确理解级别):
array(
1 => array(
'key'=>'value',
'key2'=>'value'
),
2 => array(
'key'=>'value',
'key2'=>'value'
)
)
我已经检查了 postmeta
表的 meta_value
,它是一个 longtext
,that means,长度为 4,294,967,295 个字符 (4GB) 。
所以我需要一个强大的解决方案来存储东西。
最佳解决方案
我认为,不是 100%肯定这是 WP 开发人员采取这种方法的真正原因,但常识告诉我,序列化保留变量类型,并有一个 mini 内置的错误检测,并且 json 只存储字符串值 { key : value }
,所以当你回到 PHP 你将不得不猜测格式,或为它做一个解析器。这将迫使您有两种不同的处理数据的方法:以前,将数据存储为 json,并且在解码 json 之后,它将作为完全不同的对象返回。
这是大小差异的主要原因,PHP 不仅存储数组; 它正在存储在序列化时数组中有多少元素,它们的类型及其值。
您不仅仅在数据库中存储键值对,而且还可以存储具有不同变量类型的对象。
次佳解决方案
PHP 编码是 PHP 5.2 中引入的,WordPress 的方式已经老化了,它诞生了 (专为 PHP 4 而设计) 。
数据序列化是 WordPress 中普遍存在的一个问题,因此从 PHP 序列化到 JSON 编码将意味着一个巨大的向后兼容性问题,如果我知道 WordPress 一点,永远不会发生。
也就是说,如果您认为 JSON 编码比 PHP 序列化更好,只需使用它。
如果您传递一个字符串 (即数据的 JSON-encoded 版本) 发布元功能 WordPress 不会触摸它,但是您需要记住检索到的 JSON-decode 数据。
如果 DB 存储大小对您来说非常重要,那么它可能值得额外的工作,否则只需让 WordPress 使用它所使用的,不关心它。
也许,您可以评估自定义表格来保存数据的情况。
第三种解决方案
我很想把这个看作是 「受意见」,但我认为这个问题有很好的答案。我要和”history” 一起去。
1)json_encode
在 PHP 核心中相对较新。
json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_encode — Returns the JSON representation of a value
json_encode
在 WordPress 的初期就不可靠。它只是在 5.2 版中推出了”core” PHP,尽管之前它可以作为 PECL 扩展使用。
其次,如果将 WP_Query
对象等对象提交到 json_encode
,则可以在 json_decode
上获取 stdClass
对象。 serialize
/unserialize
将保存对象。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。