web-dev-qa-db-ja.com

MySQLでJSONにblobまたはテキストを使用する必要がありますか?

データベースにjson_encoded文字列を保存する予定です。長さを正確に伝えることはできませんが、長くなると確信しています。私の懸念は、これに使用するフィールドタイプです。それはblobですか_textですか?

高速検索よりも可能な限りスペースを節約できるものを好みます。いずれの場合でも、インデックスを作成する必要がある他の列があります。

43
Leandro Garcia

blobは、通常、画像、バイナリなどのようなものに使用します。textは、あなたの場合に十分なはずです。または、それが本当に懸念される場合は、longtextを使用できます。

検索に関しては、json_encode 'のものを保存しているので、アプリケーションで使用するにはjson_decodeを呼び出す必要があります。データ型の選択は重要ではないと思いますこの場合。

より良い方法は、関連するものをjsonの1つの大きな文字列に保存するのではなく、データベース設計を正規化することです。

28
Andreas Wong

MySQL のドキュメントに記載されているように、5.7.8以降ではネイ​​ティブJSONデータ型がサポートされています。

JSONデータ型には、JSON形式の文字列を文字列列に格納するよりも次の利点があります。

  • JSON列に格納されたJSONドキュメントの自動検証。無効なドキュメントはエラーを生成します。
  • 最適化されたストレージ形式。 JSON列に格納されたJSONドキュメントは、ドキュメント要素への迅速な読み取りアクセスを許可する内部形式に変換されます。サーバーが後でこのバイナリ形式で保存されたJSON値を読み取る必要がある場合、値をテキスト表現から解析する必要はありません。バイナリ形式は、ドキュメント内の前後のすべての値を読み取ることなく、サーバーがキーまたは配列インデックスによってサブオブジェクトまたはネストされた値を直接検索できるように構造化されています。

したがって、MySQLのドキュメントにあるように、テキストではなくJSONデータ型を使用する必要があります。

34
cs04iz1