Макс. Длина столбца JSON в MySQL

Какое максимальное количество символов я могу хранить в столбце JSON в MySQL? Я не вижу этого в руководстве MySQL.

Ответ 1

Вот демо, о чем говорит @JorgeLondoño.

Установите максимальный допустимый размер пакета сервера:

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

Выйдите и снова откройте клиент mysql, на этот раз установив максимальный размер пакета клиента, чтобы он соответствовал:

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

Создайте тестовую таблицу со столбцом JSON и заполните ее самым длинным документом JSON, который вы можете:

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 |
+-----------+

Это показывает, что я смог создать один JSON-документ со 100 миллионами элементов, а MySQL хранит его примерно в 800 МБ.

Я не пробовал более длинный документ. Я предполагаю, что он максимальный на 1 ГБ, что является самым большим значением, которое вы можете установить для max_allowed_packet.

Ответ 2

Размер документов JSON, хранящихся в столбцах JSON, ограничен значением системной переменной max_allowed_packet. (Хотя сервер манипулирует значением JSON внутри памяти, он может быть больше, предел применяется, когда сервер хранит его.)

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