为了账号安全,请及时绑定邮箱和手机立即绑定

mysql存储表情符号报错

标签:
MySQL

前言

博主再开发微信公众号获取用户姓名的时候,出现了很大的问题,一开始只是设计的数据库的编码为UTF-8,但是在当用户的nickName设置为表情的符号的时候就会出错,

utf8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。其中Emoji表情是4个字节,而MySql的utf8编码最多3个字节,所以导致了数据插不进去。

https://img1.sycdn.imooc.com//5b1a479800011b3328140918.jpg

准备:

mysql从5.5.3开始支持utf8mb4

1、数据库表准备

再我们从utf-8修改为utf8mb4 的时候,很多的字段属性会受到影响

1.1、unique 设置的字段长度不能过长

1.2、varchar(1000) 过长的时候,要设置为text类型

1.3、为了防止出错,以后开发尽量使用这种字符格式的数据库,如果一旦表多了起来,很麻烦,大部分时候,需要我们将表进行重新执行sql。写入数据库,很麻烦的

2、修改数据库的编码集

1、这里博主用的数据库为阿里云的数据库,修改编码非常容易

https://img1.sycdn.imooc.com//5b1a47ae000156aa24681066.jpg

修改完成之后,要注意提交参数,mysql服务器会重新启动

https://img1.sycdn.imooc.com//5b1a47be00015f4525060752.jpg

3、对于我们自己设置的数据库

3.1、修改mysql的配置文件/etc/mysql/my.cnf, 添加如下内容

修改mysql的配置文件/etc/mysql/my.cnf, 添加如下内容

[client]
default-character-set=utf8mb4

[mysql]default-character-set=utf8mb4

[mysqld]character-set-client-handshake=FALSEcharacter-set-server=utf8mb4collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

3.2、重启数据库

mysql restart

3.3、检查配置

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'char%' OR Variable_name LIKE 'collation%';

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+| character_set_client     | utf8mb4            || character_set_connection | utf8mb4            || character_set_database   | utf8mb4            || character_set_filesystem | binary             || character_set_results    | utf8mb4            || character_set_server     | utf8mb4            || character_set_system     | utf8               || collation_connection     | utf8mb4_unicode_ci || collation_database       | utf8mb4_unicode_ci || collation_server         | utf8mb4_unicode_ci |+--------------------------+--------------------+11 rows in set (0.05 sec)

mysql>

collation_connection/collation_database/collation_server如果是utf8mb4_general_ci没有关系
但必须保证: 
character_set_client/character_se_connection/character_set_database/character_set_results/character_set_server为utf8mb4。


注意: 这里出现的结果,肯能和阿里云出现的不一样,我的阿里云是这样的,但是也能够成功

---+| character_set_client     | utf8                                || character_set_connection | utf8                                || character_set_database   | utf8mb4                             || character_set_filesystem | binary                              || character_set_results    | utf8                                || character_set_server     | utf8mb4                             || character_set_system     | utf8                                || character_sets_dir       | /u01/mysql_20170714/share/charsets/ || collation_connection     | utf8_general_ci                     || collation_database       | utf8mb4_unicode_ci                  || collation_server         | utf8mb4_general_ci                  |+--------------------------+-------------------------------------+

4、建库或者是更新编码

1、创建数据库create database duodian default character set utf8mb4 collate utf8mb4_unicode_ci ;2、修改数据库ALTER DATABASE duodianyouhui CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ;3、修改表ALTER TABLE user_info CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;4、修改字段alter table user_info modify column nickName varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

5、最终表情入库是乱码,解决乱码请看下一章节


原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消