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