在MySQL中,JSON列中可以存储的最大字符数是多少?我在MySQL手册中没有看到这一点。
mwecs4sa1#
这里有一个@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 |+-----------+
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将其存储在大约800 MB的空间中。我没有尝试更长的文件。我假设它的最大值为1 GB,这是您可以为max_allowed_packet设置的最大值。
hmtdttj42#
存储在JSON列中的JSON文档的大小限制为max_allowed_packet系统变量的值。(虽然服务器在内存中内部操作JSON值,但它可以更大;当服务器存储它时应用该限制)。
max_allowed_packet
Command-Line Format --max_allowed_packet=#System Variable Name max_allowed_packetVariable Scope Global, SessionDynamic Variable YesPermitted Values Type integerDefault 4194304Min Value 1024Max Value 1073741824
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
wyyhbhjk3#
MySQL中json数据类型字段最大允许大小为1GB。如果json的大小小于8k,那么它将作为行本身的一部分存储,就像其他数据类型一样。另一方面,大于8k的json将被移动到单独的空间作为文档,单个SQL行将有指向该文档的指针。我建议处理错误,如果你认为上传的json可以超过1GB或更好,如果你可以在存储到DB之前检查json的大小。信息来源链接在这里
3条答案
按热度按时间mwecs4sa1#
这里有一个@JorgeLondoño正在谈论的演示。
设置服务器允许的最大数据包大小:
退出并再次打开mysql客户端,这一次设置客户端最大包大小匹配:
创建一个包含JSON列的测试表,并使用最长的JSON文档填充它:
这表明我能够创建一个包含1亿个元素的JSON文档,MySQL将其存储在大约800 MB的空间中。
我没有尝试更长的文件。我假设它的最大值为1 GB,这是您可以为max_allowed_packet设置的最大值。
hmtdttj42#
存储在JSON列中的JSON文档的大小限制为
max_allowed_packet
系统变量的值。(虽然服务器在内存中内部操作JSON值,但它可以更大;当服务器存储它时应用该限制)。wyyhbhjk3#
MySQL中json数据类型字段最大允许大小为1GB。如果json的大小小于8k,那么它将作为行本身的一部分存储,就像其他数据类型一样。另一方面,大于8k的json将被移动到单独的空间作为文档,单个SQL行将有指向该文档的指针。
我建议处理错误,如果你认为上传的json可以超过1GB或更好,如果你可以在存储到DB之前检查json的大小。
信息来源链接在这里