mysql JSON_SET 无法插入具有 NULL 值的列(5.7+)
mysql JSON_SET can't insert into column with NULL value(5.7+)
我正在研究较新的 mysql 服务器的 JSON 功能。但是运行变成了一个很初级的问题。
当我不知道当前值是否为 NULL 时,如何将 {"key":"value"} 插入 JSON 列?
table仅供参考:
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)),
;
上面的 None 更新 NULL 字段。试图将列默认设置为 {}
,但不允许这样做。
因为 NULL 不是有效的 JSON 数据,mysql JSON 函数的 none 有效:
https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html
我目前的解决方法是在插入前将 NULL 设置为 {}
,但这是愚蠢的。一个简单的更新不应使用两个查询。
你们是怎么处理的?
使用COALESCE:
UPDATE testjson SET extra = JSON_SET(COALESCE(extra, '{}'), '$.age', 87);
SET extra = JSON_SET(IFNULL(extra, "{}"), "$.age", 87)
我正在研究较新的 mysql 服务器的 JSON 功能。但是运行变成了一个很初级的问题。
当我不知道当前值是否为 NULL 时,如何将 {"key":"value"} 插入 JSON 列?
table仅供参考:
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)),
;
上面的 None 更新 NULL 字段。试图将列默认设置为 {}
,但不允许这样做。
因为 NULL 不是有效的 JSON 数据,mysql JSON 函数的 none 有效: https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html
我目前的解决方法是在插入前将 NULL 设置为 {}
,但这是愚蠢的。一个简单的更新不应使用两个查询。
你们是怎么处理的?
使用COALESCE:
UPDATE testjson SET extra = JSON_SET(COALESCE(extra, '{}'), '$.age', 87);
SET extra = JSON_SET(IFNULL(extra, "{}"), "$.age", 87)