栏目头部广告

MySQL utf8mb4字符集之表情包存储/生僻词存储

针对MySQL数据库业务生产环境中,经常会有存储表情包的场景,比如:用户评论中的表情包数据。那么MySQL该如何存储这些表情数据呢?

1、直接insert插入?

既然这篇文章能够横空出世,说明直接insert是行不通的,不出意外的话,你会看到以下报错:ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\xA4\xA4' for column 'content' at row 1

2-220RH25PG14.png

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)查看插入的表情包数据

1666060088184700.png

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-220RH24933627.png

(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)再次插入测试

2-220RH2523JX.png

2-220RH2531V26.png

作者:UStarGao
链接:https://www.starcto.com/mysql/307.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`