MySQL 中的最大 JSON 列长度

Posted

技术标签:

【中文标题】MySQL 中的最大 JSON 列长度【英文标题】:Max JSON column length in MySQL 【发布时间】:2017-04-04 07:30:23 【问题描述】:

我可以在 mysql 的 JSON 列中存储的最大字符数是多少?我在 MySQL 手册中没有看到这一点。

【问题讨论】:

见dev.mysql.com/doc/refman/8.0/en/… 【参考方案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 |
+-----------+

这表明我能够创建一个包含 1 亿个元素的 JSON 文档,而 MySQL 将其存储在大约 800MB 中。

我没有尝试更长的文档。我假设它的最大值为 1 GB,这是您可以为 max_allowed_pa​​cket 设置的最大值。

【讨论】:

按照您的建议是 1GB:或配置文件中的1073741824【参考方案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

【讨论】:

以上是关于MySQL 中的最大 JSON 列长度的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL各字段的长度是多少

Mysql 中的Text字段的范围?与使用方法!

MySQL Select * FROM table WHERE 列(JSON 对象)特定值的字符串长度 <1

如何规避 mySQL 中的最大密钥长度?

如何创建一个虚拟列来索引 MySQL 中的 JSON 列?

我可以在 MySQL 的 BLOB 列中放入的最大数据长度是多少?