json_object - Longitud máxima de la columna JSON en MySQL
mysql json_modify (2)
¿Cuál es el número máximo de caracteres que puedo almacenar en una columna JSON en MySQL? No veo esto mencionado en el manual de MySQL.
Aquí hay una demostración de lo que está hablando @ JorgeLondoño.
Establezca el tamaño máximo de paquete permitido del servidor:
mysql> set global max_allowed_packet=1024*1024*1024;
Salga y abra el cliente mysql nuevamente, esta vez configurando el tamaño máximo de paquete del cliente para que coincida:
$ mysql --max-allowed-packet=$((1024*1024*1024*))
Cree una tabla de prueba con una columna JSON y rellénela con el documento JSON más largo que pueda:
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 |
+-----------+
Esto muestra que pude crear un solo documento JSON con 100 millones de elementos, y MySQL lo almacena en aproximadamente 800 MB.
No probé un documento más largo. Supongo que alcanza un máximo de 1 GB, que es el mayor valor que puede establecer para max_allowed_packet.
El tamaño de los documentos JSON almacenados en columnas JSON se limita al valor de la variable de sistema max_allowed_packet
. (Si bien el servidor manipula un valor JSON internamente en la memoria, puede ser mayor; el límite se aplica cuando el servidor lo almacena).
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