人大金仓 TEXT 转 JSON 最方便的方式

之前负责的一个项目有使用到 mysql JSON 字段的列,直接通过金仓数据库提供的迁移工具会导致 JSON 映射的列内的中文字符编码乱码,这里提供一个本人测试过的思路解决该问题。

  1. 备份一份需要迁移的 mysql 数据库。
  2. 将需要转换的 mysql 数据库的列从 JSON 类型改为 TEXT 类型。
  3. 使用数据库迁移工具执行 mysql 到 金仓的数据库的迁移工作。
  4. 对迁移后的数据列执行 JSON 转换,具体的 TEXT 到 JSON 转换语句为 ALTER TABLE <表名> ALTER COLUMN <列名> TYPE JSON USING <列名>::JSON;

如此一来间接的转换后就不会发生 JSON 列内中文乱码问题了。
具体乱码原因为数据库迁移工具缺少针对 JSON 转换的中文编码处理。
之前人大金仓的工程师是通过 mysql 导出为中间表 csv 的形式之后,再通过 csv 导入到 金仓数据库,非常麻烦,而且如果文件很大导出工作可能会很困难。


其他说明,关于 PostgreSQL 中的语句 ALTER TABLE <表名> ALTER COLUMN <列名> TYPE JSON USING <列名>::JSON;
关于 PostgreSQL 中的 JSON 和 JSONB 区别如下:

jsonb 类型的输出是对输入的内容进行了重新格式化,并删掉了输入时文本
中的空白。此外,插入记录时属性字段的顺序信息是不保留的。
jsonb 比 json 多支持的运算符有以下几个:等值判定运算符(=)、包含关系判定运算符
(@>)、被包含关系判定运算符(<@)、键值存在判定运算符(?)、判定一组键值中是否有任
意一个已存在的运算符(?|),以及判定一组键值中的每一个是否均已存在的运算符(?&)。
jsonb 类型的字段上可以直接建立 GIN 索引
jsonb 不允许其内部记录的键值重复,如果出现重复则会从中自动选择一条,其余的
重复记录会被丢弃,但 json 类型中记录键值重复是允许的。

posted @ 2020-12-16 17:04  我听不见  阅读(1456)  评论(0编辑  收藏  举报