問題描述

在我與 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。