阿里云RDS MySQL主机配置支持emoji

来源:互联网 发布:淘宝米兰春天袜子? 编辑:程序博客网 时间:2024/05/18 01:55

最近做了一次数据迁移,将传统机房的MySQL转到阿里云;

一方面是基于数据安全性和维护成本考虑;另外一方面确实要也对原有的数据库进行功能升级;

老的数据库版本是5.1.x,只支持utf-8格式的编码;对于目前流行的emoji表情是无法存储的;因为utf-8一个字符最多存储3个字节;而目前大部分emoji表情是4字节的;

那么问题来了,怎么解决这个问题呢? 新版的数据引入了utf8mb4格式编码,这个编码的子集是包含了utf-8的,所以在切换数据库编码、数据表编码、字段编码操作的时候

无需考虑是否不兼容,是否会乱码,大胆地切就行了;


具体错误提示如下:

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x81' for column xxx

uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x98\x81'





在购买阿里云RDS主机时,一定要选择5.6以上的版本;5.6以上的版本才支持utf8mb4刚才已经提到了;


由于是做数据迁移,我这边是要将一个原本utf-8格式的库迁移到阿里云上去,具体操作如下:


1、建立一个新的数据库、编码设置为utf8mb4


2、创建数转移任务,将老库的数据转移到新库中,注意迁移时将目标库编辑成刚才我们创建的那个数据库名称,这个操作相当于将老库的全部表迁移到新库中;





3、接下来完成迁移后,修改配置文件:


注意:修改这个参数要重启实例,重启过程可能造成服务闪断,这个是没办法的;

更多配置可以参考阿里云官方文档:

https://selfservice.console.aliyun.com/ticket/scene?productCode=rds&productName=%E4%BA%91%E6%95%B0%E6%8D%AE%E5%BA%93%2BRDS%E7%89%88


这些配置完成以后,意味着你的数据库已经支持utf8mb4了,也就是可以插入emoji表情了;但是以下几步也非常重要,否则也无法使用utf8mb4编码:


1、将需要支持utf8mb4的数据表设置为:utf8mb4编码格式:

语法为:ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

例如:LTER TABLE `my_table` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


2、将需要支持的数据表字段,注意是字段也要设置为utf8mb4编码格式:

语法为:ALTER TABLE 表名 CHANGE 字段名 字段名 类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

例如:ALTER TABLE my_user CHANGE content content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


应用层需要注意的:

1、JDBC的版本必须大于5.1.13版本;

2、大部分问题都在MySQL这边,应用层问题较少;什么数据库连接字符串、连接池、Spring、mybatis什么的,根本不用做改动!



到这里,整个操作就完成了;enjoy!



0 0
原创粉丝点击