web-dev-qa-db-ja.com

MySQLの最大JSON列長

MySQLのJSON列に保存できる最大文字数はいくつですか? MySQLマニュアルにはこれが記載されていません。

20
mark

@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_pa​​cketに設定できる最大値です。

30
Bill Karwin

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
16
Jorge Londoño