人大金仓 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 @   我听不见  阅读(1500)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示