MySQL将utf8字符集改为utf8mb4
2017-09-06 13:43
405 查看
前言
今天在查看tomcat日志时发现了一个错误:Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...' for column 'name' at row 1
在网上查找了说是mysql的字符集编码的问题,因为mysql的utf8编码最大是3个字节,而现在比较流行的emoji表情是四个字节的,所以导致mysql报错。MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。所以utf8mb4要比utf8浪费点空间,但是还是推荐使用utf8mb4,原因就是手机上网的用户太多了, 随便输入一个[emoji]表情mysql就存不了,其合理性可想而知。
解决方案
因为我们使用的是阿里云的rds mysql,所以不能修改配置文件,所以只能修改数据库和表和字段
关于mysql的字符集还是有很多知识的,比如utf8_bin与utf8_unicode_ci和utf8_unicode_cs还有utf8_general_ci和utf8_general_cs他们之间的区别与联系都可以了解一下哦
今天在查看tomcat日志时发现了一个错误:Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...' for column 'name' at row 1
在网上查找了说是mysql的字符集编码的问题,因为mysql的utf8编码最大是3个字节,而现在比较流行的emoji表情是四个字节的,所以导致mysql报错。MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。所以utf8mb4要比utf8浪费点空间,但是还是推荐使用utf8mb4,原因就是手机上网的用户太多了, 随便输入一个[emoji]表情mysql就存不了,其合理性可想而知。
解决方案
因为我们使用的是阿里云的rds mysql,所以不能修改配置文件,所以只能修改数据库和表和字段
#数据库 ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; #表 ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; #字段 ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;然后我们使用sql语句检查表的编码
SHOW CREATE TABLE `user`;
关于mysql的字符集还是有很多知识的,比如utf8_bin与utf8_unicode_ci和utf8_unicode_cs还有utf8_general_ci和utf8_general_cs他们之间的区别与联系都可以了解一下哦
相关文章推荐
- mysql改变表的编码字符集,将utf8改为utf8mb4
- MySQL 如何修改字符集 utf8 改为 utf8mb4
- Mysql中,utf8mb4与utf8字符集的区别
- mysql中database库和tables表中字符集 utf8 和utf8mb4 有什么区别?
- MySQL中字符集改为utf8
- mysql中database库和tables表中字符集 utf8 和utf8mb4 有什么区别?
- MySQL乱码问题以及utf8mb4字符集---utf8mb4和utf8有什么区别? emoji表情与utf8mb4
- MySQL中字符集 utf8mb4与utf8的区别
- mysql中字符集 utf8 和utf8mb4 有什么区别?
- mysql中字符集 utf8 和utf8mb4 区别
- mysql字符集 utf8 和utf8mb4 的区别
- 更改mysql字符集utf8至utf8mb4
- mysql中字符集 utf8 和utf8mb4 有什么区别?
- MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题
- 修改MySQL字符集为utf8mb4,支持emoji表情
- CentOS7下安装mysql5.6修改字符集为utf8并开放端口允许远程访问
- mac下修改mysql的默认字符集为utf8
- Mysql字符集设置为utf8,怎么插入中文还是ERROR 1406 (22001): Data too long...
- ubuntu 9.10 下设置mysql字符集utf8