mysql JSON_SET无法插入具有NULL值的列(5.7 +)

时间:2016-11-30 19:49:00

标签: mysql json mysql-json

我正在探索更新的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设置为{},但它是愚蠢的。简单的更新不应使用两个查询。

你们怎么处理这个?

2 个答案:

答案 0 :(得分:18)

使用COALESCE

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

答案 1 :(得分:3)

SET extra = JSON_SET(IFNULL(extra, "{}"), "$.age", 87)