【问题标题】:Rails serialized JSON to string gives error on mysql JSON fieldRails 将 JSON 序列化为字符串会在 mysql JSON 字段上出现错误
【发布时间】:2017-12-12 10:02:45
【问题描述】:

我有一个旧表,它使用 Rails ActiveRecord 序列化程序将 json 保存到字符串 sql 字段。我创建了一个字段数据类型为 JSON 的新表,它是在 MySQL 5.7 中引入的。但是直接将数据从旧字段复制到新字段会出现 JSON 错误,提示 json 结构错误。

更具体地说,问题在于我的数据库尚不支持的 unicode 字符,并且数据库太大而无法迁移所有内容以支持它。

我正在寻找一种将数据从旧字段迁移到新 JSON 字段的方法

我已经看到将 \ufor unicode 字符替换为 JSON 字符串中的 \\u 解决了这个问题,但我不能这样做:

update table_name set column_name=REPLACE(column_name, '\u', '\\u');

因为它又报错了

ERROR 3140 (22032): Invalid JSON text: "Invalid escape character in string." at position 564 in value for column 'table_name.column_name'.

【问题讨论】:

  • 两个问题: 1. 您确定这是解决您要解决的任何问题所需执行的操作吗? 2. 你真正想解决什么问题?您是如何将数据放入无效的列中的?您不应该在不使用 JSON 函数的情况下操作 JSON 列,并且根据定义,不需要直接操作 JSON 列中的数据。
  • 所以这是使用 Rails 中的 Activerecord 序列化程序序列化的旧数据,我将其迁移到新表中的 json 列,但在 ruby​​ 上解析此 JSON 时出现错误。我在 JSON 中手动将 \u 更改为 \\u 并看到它解决了问题

标签: mysql json string replace


【解决方案1】:

对于 sql 更新表值 \u 到 \\u :

 update table_name set column_name=REPLACE(column_name, '\\u', '\\\\u') [where condition];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多