修复 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 '"[%';
我使用外部脚本将数据从一个 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 '"[%';