10

我正在探索较新的 mysql 服务器的 JSON 函数。但是遇到一个非常初级的问题。

当我不知道当前值是否为 NULL 时,如何将 {"key":"value"} 插入 JSON 列?

该表仅用于说明:

CREATE TABLE `testjson` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `extra` JSON NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)

使用 NULL 和有效的 json 值测试数据。

| id | extra             | 
| -: | -                 | 
| 1  | (NULL)            | 
| 2  | {"name": "james"} | 

期望的结果:

| id | extra                        | 
| -: | -                            | 
| 1  | {"age": 87}                  | 
| 2  | {"age": 87, "name": "james"} | 

现在,我尝试将 {"age":87} 添加到所有行中:

UPDATE testjson
    SET extra = JSON_SET(extra,'$.age', 87)
;

UPDATE testjson
    SET extra = JSON_MERGE(extra,JSON_OBJECT('age', 87)),
;

以上均未更新 NULL 字段。尝试将列默认设置为{},但不允许这样做。

因为 NULL 不是有效的 JSON 数据,所以 mysql JSON 函数都不起作用: https ://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html

我目前的解决方法是{}在插入之前将 NULL 设置为,但这很愚蠢。一个简单的更新不应该使用两个查询。

你们怎么处理这个?

4

2 回答 2

32

使用COALESCE

UPDATE testjson SET extra = JSON_SET(COALESCE(extra, '{}'), '$.age', 87);

于 2017-02-07T21:57:09.317 回答
4
SET extra = JSON_SET(IFNULL(extra, "{}"), "$.age", 87)
于 2020-03-09T09:46:45.690 回答