我正在探索新的mysql服务器的JSON函数。但遇到一个非常基本的问题。mysql JSON_SET无法插入到具有NULL值的列(5.7+)
当我不知道当前值是否为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"} |
现在,我尝试添加{ “时代”: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 funcion作品: https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html
我目前的解决办法是插入前设置为NULL {}
,但它是愚蠢的。一个简单的更新不应该使用两个查询。
你们如何处理这个问题?
检查,如果你有一个NULL值(控制流功能),如果是使用的是_create_ JSON的功能之一...? https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html – CBroe
Try:'UPDATE \'testjson \'SET \'extra \'= IF(\'extra \'IS NULL,JSON_OBJECT('age',87),JSON_INSERT(\'extra \','$ .age',87));'。 – wchiquito