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