web-dev-qa-db-fra.com

Longueur maximale de colonne JSON dans MySQL

Quel est le nombre maximum de caractères que je peux stocker dans une colonne JSON dans MySQL? Je ne vois pas cela mentionné dans le manuel MySQL.

20
mark

Voici une démonstration de ce dont @ JorgeLondoño parle.

Définissez la taille de paquet maximale autorisée du serveur:

mysql> set global max_allowed_packet=1024*1024*1024;

Quittez et ouvrez à nouveau le client mysql, en définissant cette fois la taille maximale du paquet client pour correspondre:

$ mysql --max-allowed-packet=$((1024*1024*1024*))

Créez une table de test avec une colonne JSON et remplissez-la avec le document JSON le plus long possible:

mysql> create table test.jtest ( j json );

mysql> insert into test.jtest 
  set j = concat('[', repeat('"Word",', 100000000), '"Word"]');
Query OK, 1 row affected (1 min 49.67 sec)

mysql> select length(j) from test.jtest;
+-----------+
| length(j) |
+-----------+
| 800000008 |
+-----------+

Cela montre que j'ai pu créer un seul document JSON avec 100 millions d'éléments, et MySQL le stocke dans environ 800 Mo.

Je n'ai pas essayé un document plus long. Je suppose qu'il atteint 1 Go au maximum, ce qui est la plus grande valeur que vous pouvez définir pour max_allowed_packet.

30
Bill Karwin

La taille des documents JSON stockés dans les colonnes JSON est limitée à la valeur de max_allowed_packet variable système. (Bien que le serveur manipule une valeur JSON en interne en mémoire, elle peut être plus grande; la limite s'applique lorsque le serveur la stocke.)

Command-Line Format --max_allowed_packet=#
System Variable Name    max_allowed_packet
Variable Scope  Global, Session
Dynamic Variable    Yes
Permitted Values    Type    integer
Default 4194304
Min Value   1024
Max Value   1073741824
16
Jorge Londoño