资讯专栏INFORMATION COLUMN

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

社区管理员 / 1304人阅读

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

1、直接insert插入?

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

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

image.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,'????????','男');

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128105.html

相关文章

  • mysql/Java服务端对emoji的支持

    摘要:前言最近开发的项目因为需要用户文本的存储,自然就遇到了等表情符号如何被支持的问题。问题描述如果字符集且是服务器的话,当存储含有表情时,会抛出类似如下异常这就是字符集不支持的异常。升级步骤的最低版本支持版本为,若不是,请升级到较新版本。   前言: 最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题。困扰了数日,在就要绝望放弃...

    lncwwn 评论0 收藏0
  • Mysql支持emoji表情

    摘要:教程所示图片使用的是仓库图片,网速过慢的朋友请移步原文支持表情。因为评论里面有表情,所以需要数据库支持编码。摸索后发现,需要更改的配置文件。在创建表格时候,设置字符集是,如下图所示最后,各式各样的表情就可以存储在数据库了 教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)Mysql 支持 emoji 表情。 更多讨论或者错误提交,也请移步。 1. 前言 ...

    MiracleWong 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<