背景:

从gp推送数据到mysql,报非utf-8字符无法推送过去(其实是mysql不支持超三位字节的utf8字符导致的)

问题解析:

经查看,mysql的字符集为 utf8_general_ci 而非utf8mb4。因为utf8_general_ci支持的uft8最为3位字节,一旦超过了3位字节就认为非utf8;而utf8mb4支持4位utf8字符

解决方案:

①治本:

MySQL 5.5 及后续版本,添加对4位utf8字符的支持,需要将字符集改为utf8mb,但是要注意改完之后看是否对mysql表数据有影响。

②治标:

从源头处理超长字节的utf8字符,本次是以postgresql为源头例子:

将超长字节的utf8字符替换为空:

select regexp_replace(content,'[^\u0000-\uFFFF]','') as rep_content from tab;