升级至6.5.3版本之后,JSON列类型出现base64:type253编码

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】
【附件:截图/日志/监控】
TIDB版本从5.3.1 升级到6.5.3版本之后,发现数据库里面一些JSON列会变成base64:type253 开头的内容。
也参阅过其他的帖子DM 同步json类型字段出现base64加密(syncer) - #2,来自 Billmay表妹 。说是因为有特殊字符,但是我们自己解开base64 的内容,其实里面没有特殊字符的,类型都很简单。
诉求:

  1. 这个特性是否可以关闭?

我在文档里面没有找到这个enable-table-column-encoding 参数哎~

不应该啊,DM应该不会自己转换json类型的,能给出个行的示例么?


比如这个 ,图里面的就是被base64之后的数据。正常应该是一个

这样子的json串

这个应该是dm的问题把~ 不是TIDB集群配置的问题

你们有做过什么编译吗?

没有,都是基于官方的版本

这是dm写的数据?写的低版本没有问题,写到升级后的高版本就有问题?

dm升级了吗?

你查一下你所有组件的版本看看
会不会存在有些组件版本并没有完整升级到6.5.3

不一定是dm的问题。

MySQL 5.7:

mysql> select CAST(CAST('1234abcd' AS BINARY) AS JSON);
+------------------------------------------+
| CAST(CAST('1234abcd' AS BINARY) AS JSON) |
+------------------------------------------+
| "base64:type253:MTIzNGFiY2Q="            |
+------------------------------------------+
1 row in set (0.01 sec)

mysql上,这样类型转一下就变成base64:type253:开头的字符串了。查查看列的类型是否有这种类型转换?

我做下测试复现下场景。 然后贴这里哈

我有点怀疑是上下游字符集导致的。我先做下测试看下

这是为了提高查询性能,不会影响数据的正确性,我没查到哪里能关

解决了嘛

请问你这个数据是直接写入的还是 DM 同步的呢? 升级后有没有做 DM 同步操作

TiDB 会将 binary string 的 JSON 存储为 Opaque Json, 其格式为 ase64:typeXX,详见这个 PR。你可以根据这个 issue看看你们是不是也有类似的 JSON 写入方法。 具体 JSON 的类型你可以通过 JSON_TYPE 来查询。
关于 JSON type 可以参考 https://dev.mysql.com/doc/refman/8.0/en/json.html#json-comparison

2 个赞

请问这个问题怎么解决的?

我们现在升级到TiDB7.1.0后,通过DM同步的JSON类型数据全部变为了base64:type253:eyJmcGRt… 这种格式。
影响到了业务

每看懂怎么解决的

如何解决的呢