MySQL UTF8 编码下生僻字符插入失败/假死问题的分析/ETL 同步数据失败

一、问题描述

ETL过程中失败,将MySQL中的数据同步到 另外一台服务器上的MySQL 数据库中,由于遇到了生僻字的解析,导致同步数据失败。

对的就是上面的箭头中所指的那个字导致ETL失败,怎么办尼?

二、原因分析

       三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。

     utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。

     要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();)。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8.  对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR  替代 CHAR。

三、解决方式

3.1.直接修改表的字符集

​
-- 修改数据库的
alter database test character set = utfmb4;

​-- 修改表的字符集
alter table test convert to character set utf8mb4

3.2.1.修改数据库默认配置

[client]
default-character-set = utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4

猜你喜欢

转载自blog.csdn.net/qq_35995514/article/details/109560474