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

Fixing MySQL JSON array accidentally stored as string

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

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

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

当然,任何试图像读取数组一样读取列值的查询现在都已损坏。

有没有办法通过 MySQL 查询将数据规范化为应有的数据来解决此问题?

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

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

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

通过 运行 这个查询解决了这个问题:

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