私がWordPressを使っていた頃、私はWordPress自体とそのフレンドリーなプラグインがデータをdbに格納するのにPHP serialize()
を使っているのを見ました。しかし、最近の検索で、私はjson_encode()
に対するserialize()
の深刻なコミュニティサポートを見つけました。
json_encode()
がserialize()
より優れていることを証明するテスト - StackOverflowjson_encode()
が使える理由と使えない理由 - StackOverflowそして私は個人的に両方を使って連想配列をテストしました。
serialize()
ストア342文字json_encode()
ストア285文字私はプロジェクトに参加していますが、繰り返しメタフィールドを投稿に格納する予定です。どこで:
array(
1 => array(
'key'=>'value',
'key2'=>'value'
),
2 => array(
'key'=>'value',
'key2'=>'value'
)
)
私はpostmeta
テーブルのmeta_value
フィールドがlongtext
であることを確認しました、 これはつまり 4,294,967,295文字(4GB)の長さです。
だから私は物事を保存するための堅牢なソリューションが必要です。
これがWP開発者がこのアプローチをとった本当の理由であることを100%確信することはできませんが、常識的に言うと、シリアライズは変数型を保持し、エラー検出にはミニを内蔵し、jsonストアのみ文字列値は{ key : value }
なので、PHPに戻るときには、フォーマットを推測するか、それにパーサーを設定する必要があります。これはあなたのデータを扱うための2つの異なる方法を持つことを強いるでしょう:以前はjsonとしてデータを保存することと、jsonをデコードした後それは全く異なるオブジェクトとして戻ってくることです。
これが、サイズの違いPHPが配列だけでなく格納されている主な理由です。シリアル化されたときに配列に含まれていた要素の数、それらの型、およびそれらの値を格納しています。
データベースにキーと値のペアだけを格納するのではなく、さまざまな変数型を持つオブジェクトを格納することもできます。
JSONエンコーディングはPHP 5.2で導入されました、WordPressはそれよりもずっと古く、そしてそれはPHP 4から生まれました(そしてそのために設計されました)。
データのシリアル化はWordPressで広く行きわたっているので、PHPシリアル化からJSONエンコーディングへの移行は大きな後方互換性の問題を意味するでしょう、そして私が少しWordPressを知っていれば、それは起こりません。
そうは言っても、JSONエンコーディングがPHPシリアライゼーションよりもあなたに適していると思うなら、それを使ってください。
あなたがメタ関数を投稿するために文字列(つまり、あなたのデータのJSONエンコードバージョン)を渡した場合、WordPressはそれに触れませんが、検索時にデータをJSONデコードすることを忘れないでください。
DBストレージのサイズがあなたにとって非常に重要であるならば、それはおそらく追加の仕事の価値があるということです、さもなければWordPressにそれが使うものを使わせてそれを気にしないでください。
たぶん、あなたはそれがあなたのデータを保存するためのカスタムテーブルの場合であるかどうかを評価することができます。
私はこれを「意見の対象」として閉じたいと思っていますが、この質問には良い答えがいくつかあると思います。私は「歴史」と共に行きます。
1)json_encode
はPHPコアで比較的新しいです。
json_encode
(PHP 5> = 5.2.0、PECL json> = 1.2.0)json_encode - 値のJSON表現を返す
json_encode
はWordPressの初期の頃は信頼できなかったでしょう。それは5.2で "core" PHPにロールインされただけでした、それはそれよりずっと前にPECL拡張として利用可能でした。
次に、WP_Query
オブジェクトなどのオブジェクトをjson_encode
に入力すると、json_decode
にstdClass
オブジェクトが返されます。 serialize
/unserialize
はオブジェクトを保存します。