我正在探索新的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