首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql JSON_SET不能插入空值的列(5.7+)

问mysql JSON_SET不能插入空值的列(5.7+)
EN

Stack Overflow用户
提问于 2016-11-30 19:49:00
回答 2查看 8.7K关注 0票数 12

我正在探索新的mysql服务器的JSON功能。但是遇到了一个非常基本的问题。

如果不知道当前值是否为空,如何将{“”:“值”}插入JSON列?

本表仅作说明:

代码语言:javascript
复制
CREATE TABLE `testjson` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `extra` JSON NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)

测试具有空值和有效json值的数据。

代码语言:javascript
复制
| id | extra             | 
| -: | -                 | 
| 1  | (NULL)            | 
| 2  | {"name": "james"} | 

预期结果:

代码语言:javascript
复制
| id | extra                        | 
| -: | -                            | 
| 1  | {"age": 87}                  | 
| 2  | {"age": 87, "name": "james"} | 

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

代码语言:javascript
复制
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设置为{},但这是愚蠢的。一个简单的更新不应该使用两个查询。

你们是怎么处理的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-07 21:57:09

使用聚结

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

票数 34
EN

Stack Overflow用户

发布于 2020-03-09 09:46:45

代码语言:javascript
复制
SET extra = JSON_SET(IFNULL(extra, "{}"), "$.age", 87)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40896920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档