所以我在数据库中有一个表,看起来像这样:

类别

idCategory |数据

“ idCategory”列为AUTO_INCREMENT,数据字段为JSON。
我将数据存储在表中,如下所示:

1, {"CategoryNames": {"DE": "Wirtschaft", "EN": "Economy"}}
2, {"CategoryNames": {"DE": "Geschichte", "EN": "History"}}


想法是用不同的语言存储类别的名称。我最好需要“ CategoryNames”标签,以便以后可以添加其他属性(如“ Difficulty”),而又不影响语言。

我想做的是在“ CategoryNames”标签下添加其他语言,而不删除或替换现有语言。

所以看起来像这样

2, {"CategoryNames": {"DE": "Geschichte", "EN": "History", "FR" : "Histoire"}}


我已经尝试使用JSON_INSERT进行以下操作:

UPDATE phpframework.category SET data = JSON_INSERT(data, "$.CategoryNames", JSON_OBJECT('FR', 'Histoire')) WHERE idCategory = 2;


但是什么也没发生,列保持不变。使用JSON_SET只会替换我现有的语言。我也尝试过JSON_ARRAY_APPEND,但它看起来像这样:

{"CategoryNames": [{"DE": "Geschichte", "EN": "History"}, {"EN": "Math"}]}


有谁知道正确的MYSQL命令?

最佳答案

您不想插入整个对象,而是要在现有对象中设置属性。

UPDATE phpframework.category
SET data = JSON_INSERT(data, "$.CategoryNames.FR", 'Histoire')
WHERE idCategory = 2;


如果希望它替换已存在的属性,也可以使用JSON_SET代替JSON_INSERT

关于mysql - JSON的数据更新不起作用(MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39073725/

10-09 06:20
查看更多