问题描述

在我与 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,它是一个 longtextthat 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

http://php.net/manual/en/function.json-encode.php

json_encode 在 WordPress 的初期就不可靠。它只是在 5.2 版中推出了”core” PHP,尽管之前它可以作为 PECL 扩展使用。

其次,如果将 WP_Query 对象等对象提交到 json_encode,则可以在 json_decode 上获取 stdClass 对象。 serialize /unserialize 将保存对象。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。