我有一个这样的表:
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`settings` json NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `test` (`id`, `settings`) VALUES
('1', '{\"foo\": {\"bar\": 1}}'),
('2', '{\"foobar\": 2}'),
('3', '[]');
我想向一行添加一个新设置,所以我尝试了 JSON_SET :
SELECT *, JSON_SET(settings, '$.newFoo', 10) FROM test;
正如你所看到的,它对第3行不起作用。预期结果当然与第4行相同; []
是 php 中对空数组进行 json 编码的结果(如果该项目没有任何设置)。
可以进行适用于所有情况的单个查询吗?
<小时/>P.S.:我需要做的是更新,即 UPDATE test SET settings=JSON_SET(...) WHERE id=?;
最佳答案
这也困扰了我很长一段时间,但尝试使用 JSON_ARRAY() 而不是双括号符号“[]”。例如:
INSERT INTO `test` (`id`, `settings`) VALUES
('1', '{\"foo\": {\"bar\": 1}}'),
('2', '{\"foobar\": 2}'),
('3', JSON_ARRAY());
关于MySQL JSON_SET() 处理空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060169/