暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

MogDB - 使用转码处理不可见字符的数据查重

原创 伊织鸟 2024-06-17
199

起因

某天,接到一个用户需求,varchar字段中有一些重复数据使用SQL查重时,明明数据是一样的,但是SQL还是将数据区分出来,影响了后续交易的正常执行。

在仔细检查数据后,发现数据中存在大量的不可见字符,导致了数据唯一行排查结果没有符合预期。

复现

创建测试表

--创建测试表 create table t3 (id varchar); --插入正常数据 insert into t3 select '123456'; insert into t3 select '123456'; --插入末尾带'空格'数据 insert into t3 select '123456 '; --插入末尾带'制表符'数据 insert into t3 select E'123456\t';

检查数据重复率

通过查重SQL可以发现id数据显示一致,但是在count列中发现将数据进行了筛选,分为了三种不同的数据(符合预期)。

select id,count(*) from t3 group by id;

图片.png

转换为字符,并查看数据间区别

对于以上问题,我们可以将数据转换为16进制字符,清晰的查看数据之间的不同

select id,id::bytea id_code,count(*) from t3 group by id,id_code;

图片.png

通过转换后,可以发现id_code第一行数据末尾多了一个acsii(09)字符,对应制表符
图片.png

id_code第二行数据末尾多了一个acsii(20)字符,对应空格
图片.png

总结及拾遗:

本文通过不可见字符的转码查询,处理了肉眼一致数据的查重失败问题。同时,转码查询也可以用于乱码检查,copy分隔符不可见字符等问题场景处理。

转码也是一种对于乱码,不可见字符等问题根因排查的各类型数据库通用处理方法。

字码查询:
可以使用下面两个网站在线查询码和汉字的对应关系:
https://www.toolhelper.cn/EncodeDecode/EncodeDecode
https://www.qqxiuzi.cn/bianma/zifuji.php

ascii码查询:
可以根据下面的图片查看字符对应的ascii码:
图片.png

最后修改时间:2024-06-19 10:39:00
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论