web-dev-qa-db-fra.com

Dois-je utiliser un objet blob ou du texte pour JSON dans MySQL?

Je prévois de stocker un json_encoded chaîne sur ma base de données. Je ne peux pas dire avec précision la durée, mais je suis sûr que ce sera long. Ma préoccupation est le type de champ que je vais utiliser pour cela, est-ce blob ou text?

Je préfère celui où je peux économiser de l'espace autant que possible sur la recherche rapide, en tout cas j'ai une autre colonne où je devrais simplement indexer.

43
Leandro Garcia

blob est généralement pour des choses comme les images, les binaires, etc. text devrait être assez bon pour votre cas, ou vous pouvez utiliser longtext qui a une capacité d'espace encore plus grande si c'est vraiment un préoccupation.

En ce qui concerne la recherche, puisque vous stockez json_encode 'D stuff, vous devrez toujours appeler json_decode de toute façon pour qu'il soit utile dans votre application, je ne pense pas que le choix du type de données soit important dans ce cas.

Une meilleure façon est de normaliser la conception de votre base de données au lieu de stocker des éléments connexes dans une grande chaîne de json.

28
Andreas Wong

Comme indiqué dans la documentation de MySQL , depuis 5.7.8, un type de données JSON natif est pris en charge.

Le type de données JSON offre ces avantages par rapport au stockage de chaînes au format JSON dans une colonne de chaînes:

  • Validation automatique des documents JSON stockés dans des colonnes JSON. Les documents non valides génèrent une erreur.
  • Format de stockage optimisé. Les documents JSON stockés dans des colonnes JSON sont convertis dans un format interne qui permet un accès en lecture rapide aux éléments du document. Lorsque le serveur doit lire ultérieurement une valeur JSON stockée dans ce format binaire, la valeur n'a pas besoin d'être analysée à partir d'une représentation textuelle. Le format binaire est structuré pour permettre au serveur de rechercher des sous-objets ou des valeurs imbriquées directement par index de clé ou de tableau sans lire toutes les valeurs avant ou après dans le document.

Ainsi, comme l'indique la documentation MySQL, le type de données JSON doit être utilisé et non le texte.

34
cs04iz1