10

新しいmysqlサーバーのJSON関数を調査しています。しかし、非常に初歩的な問題に遭遇します。

現在の値が NULL かどうかわからない場合、JSON 列に {"key":"value"} を挿入するにはどうすればよいですか?

次の表は、説明のみを目的としています。

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)),
;

上記のいずれも NULL フィールドを更新しません。列のデフォルトを に設定しようとしました{}が、許可されていません。

NULL は有効な JSON データではないため、mysql JSON 関数は機能しません: https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html

私の現在の回避策は{}、挿入前に NULL を設定することですが、それはばかげています。単純な更新では、2 つのクエリを使用しないでください。

皆さんはこれをどのように処理しますか?

4

2 に答える 2

4
SET extra = JSON_SET(IFNULL(extra, "{}"), "$.age", 87)
于 2020-03-09T09:46:45.690 に答える