MySQLのJSON列に保存できる最大文字数はいくつですか? MySQLマニュアルにはこれが記載されていません。
@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 |
+-----------+
これは、1億個の要素を持つ単一のJSONドキュメントを作成できたことを示しており、MySQLはこれを約800MBに保存します。
長いドキュメントを試しませんでした。最大値は1 GBであると想定しています。これは、max_allowed_packetに設定できる最大値です。
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