MySQL JSON_OBJECT + CONCAT & GROUP_CONCAT 作为别名 & 截断/最大长度

标签 mysql json alias

我正在尝试通过 MySQL 将一些关系信息提取到 JSON 字符串中。但是,我使用的方法似乎截断了返回值。

MyQSL 是否对使用 CONCAT/GROUP_CONCAT/JSON_OBJECT 的查询强制执行某种最大字符串长度?我可以覆盖它吗?

(SELECT
    CONCAT(
        '[',
            GROUP_CONCAT(
                JSON_OBJECT(
                    'my_key_1', my_table.my_val_1,
                    'my_key_2', my_table.my_val_2,
                    'my_key_3', my_table.my_val_3,
                    'my_key_4', my_table.my_val_4,
                    ## [etc, etc ...]
                )
            ),
        ']' 
    )
    FROM my_table
) AS my_alias

最佳答案

使用 JSON_ARRAYAGG 而不是 GROUP_CONCAT:

SELECT
    JSON_ARRAYAGG(
        JSON_OBJECT(
            'my_key_1', my_table.my_val_1,
            'my_key_2', my_table.my_val_2,
            'my_key_3', my_table.my_val_3,
            'my_key_4', my_table.my_val_4,
            ## [etc, etc ...]
        )
    )
FROM my_table

GROUP_CONCAT 在@@group_concat_max_len 处被截断(在 MySQL 或 10.2 之前的 MariaDB 上默认为 1024,但您可以使用例如 SET @@group_concat_max_len=1000000;)进行设置;此限制不适用于 JSON_ARRAYAGG。

JSON_ARRAYAGG 需要 MySQL 5.7.22+ 或 MariaDB 10.5+

关于MySQL JSON_OBJECT + CONCAT & GROUP_CONCAT 作为别名 & 截断/最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63693167/

相关文章:

MySQL选择最接近的值

objective-c - RestKit - POST 响应对象映射

windows - 在 Windows 上设置 Docker 化的命令行应用程序

git - 在命令行中编辑 Git 别名

php - 递归链接记录

MySQL:如果表存在,截断并插入 ELSE 创建

php - 如何访问登录名到mysql php

java - Spring 启动: automatic JSON message converter for @Requestbody GET doesn't work

php - 使用 csrf token 从 android 应用程序访问 laravel 应用程序

alias - 默认开启 git log 参数