MySQL utf8mb4字符集之表情包存储/生僻词存储
针对MySQL数据库业务生产环境中,经常会有存储表情包的场景,比如:用户评论中的表情包数据。那么MySQL该如何存储这些表情数据呢?
1、直接insert插入?
既然这篇文章能够横空出世,说明直接insert是行不通的,不出意外的话,你会看到以下报错:ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\xA4\xA4' for column 'content' at row 1
2、MySQL字符集utf8mb4
涉及到文字、字符、表情等字符的存储,肯定是离不开MySQL对字符编码的支持。utf8mb4就是支持表情包的字符集,而MySQL在5.5.3版本时,就已经实现了对utf8mb4字符集的支持。关于字符集的相关介绍,我这里就不再赘述了,详情可以参考:MySQL字符集变量介绍。接下来我们直奔主题~
(1)修改MySQL配置文件
# 修改my.cnf配置文件 [mysqld] character_set_server = utf8mb4 collation_server = utf8mb4_general_ci init_connect = SET NAMES utf8mb4 # 用户登录到数据库上之后,在执行第一次查询之前,执行的内容的 skip-character-set-client-handshake = 1 # 跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
(2)修改存量表字符集
# 在线修改表字符集 alter table tb_name convert to character set utf8mb4;
3、表情包存储测试
(1)准备测试数据
create database starcto; use starcto CREATE TABLE my_comments ( `bulletinId` bigint NOT NULL COMMENT '消息id', `content` varchar(256) NOT NULL COMMENT '内容', PRIMARY KEY pk_my_comments(`bulletinId`) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; # 插入带有表情的测试数据 insert into my_comments (bulletinid,content) values (0, '谢谢,太好看了!!🤤'); insert into my_comments (bulletinid,content) values (1, '谢谢,太好看了!!🤤');
(2)查看插入的表情包数据
4、生僻字存储测试
(1)报错复现,准备初始测试表
create database DB; CREATE TABLE student ( sno INT, sname VARCHAR(32), ssex VARCHAR(8) , primary key (sno) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # 初始指定默认字符集utf8 # 插入生僻字:𬌗𬌗 insert into student values (1001,'𬌗𬌗','男');
(2)异常解决
#(1)查看表结构,发现student表默认是utf8字符集 mysql> show create table student\G; *************************** 1. row *************************** Table: student Create Table: CREATE TABLE `student` ( `sno` int(11) NOT NULL, `sname` varchar(32) DEFAULT NULL, `ssex` varchar(8) DEFAULT NULL, PRIMARY KEY (`sno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) #(2)修改表字符集 mysql> alter table student convert to character set utf8mb4; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 #(3)再次插入测试
作者:UStarGao
链接:https://www.starcto.com/mysql/307.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-08-16UDP测试解决方案
- 2021-06-23iptables与firewalls网络防火墙相关配置
- 2021-01-29MySQL多线程复制配置
- 2021-08-09MySQL基于Binlog数据恢复方案
- 2021-02-14MongoDB集合(collection)与其物理文件对照关系查询