我正在探索新的mysql服务器的JSON功能。但是遇到了一个非常基本的问题。
如果不知道当前值是否为空,如何将{“”:“值”}插入JSON列?
本表仅作说明:
CREATE TABLE `testjson` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`extra` JSON NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)测试具有空值和有效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不是有效的JSON数据,所以mysql功能没有一个工作:https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html
我目前的工作是在插入之前将NULL设置为{},但这是愚蠢的。一个简单的更新不应该使用两个查询。
你们是怎么处理的?
发布于 2017-02-07 21:57:09
使用聚结
UPDATE testjson SET extra = JSON_SET(COALESCE(extra, '{}'), '$.age', 87);
发布于 2020-03-09 09:46:45
SET extra = JSON_SET(IFNULL(extra, "{}"), "$.age", 87)https://stackoverflow.com/questions/40896920
复制相似问题