mysql - Rails 将 JSON 序列化为字符串在 mysql JSON 字段上出现错误

标签 mysql json string replace

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

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

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

我发现将 JSON 字符串中的 unicode 字符替换为 \\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'.

最佳答案

对于将表值\u 更新为\\u 的 sql:

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

关于mysql - Rails 将 JSON 序列化为字符串在 mysql JSON 字段上出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44982070/

相关文章:

mysql - 在 MySQL 中按数字顺序排序,然后按字母顺序排序

python - macos Django 找不到 mysqlclient

python - 如何使用 Python 将 JSON 中的值替换为 RegEx 在文件中找到的值?

php - 抓取 php 字符串中最后 "/"之后的剩余文本

java - 存储与保存生成字符串

java - ArrayList 显示数据库中的所有结果

mySQL SELECT 时间戳(现在()-3000);

java - 需要更改我的代码以生成正确的 JSON 对象

javascript - Knockout 没有使用我的数据渲染模板

java - 将字符串转换为其表示的十六进制值