修复意外存储为字符串的MySQL JSON数组

时间:2019-06-07 01:43:26

标签: mysql arrays mysql-5.7

我使用外部脚本将数据从一个表传输到另一个表。该表的其中一列是json类型的名为permissions的列,其中包含各种权限的数组。

在新表中,所有数组都被误编码为字符串而不是数组。

例如,我看到的是"[\"ANALYZE\", \"MANAGE\"]"而不是["ANALYZE", "MANAGE"]的值。

当然,现在所有试图读取列值就像是数组的查询都将被破坏。

是否可以通过MySQL查询解决此问题,以将数据规范化为应有的形式?

我尝试过此方法,但是它不影响任何行,当然,它还必须与每个列上的数组中元素的顺序完全匹配,这是不准确的:

UPDATE accounts SET permissions = '["ANALYZE", "MANAGE"]' WHERE permissions = '[\\"ANALYZE\\", \\"MANAGE\\"]';

纠正这种混乱的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

通过运行以下查询解决此问题:

UPDATE accounts SET permissions = JSON_UNQUOTE(permissions) WHERE permissions like '"[%';