Mysql如何支持emoji表情

结绳记事,记录、思考,方有成长~

一、什么是字符集
字符集(charcter set)是一套符号 和 编码。校对规则(collation)是在字符集内用于比较字符的一套规则,即字符集的排序规则。
假设我们有一个字母表使用了4个字母:‘A’、‘B’、‘a’、‘b’。现在为每一个字母赋予一个数值:‘A’=0, ‘B’=1, ‘a’=2, ‘b’=3,字母’A’是一个符号,数字0是’A’的编码,那么这4个字母和它们的编码组合在一起就是一个字符集。我们可以认为字符集是字符的二进制的编码方式,即二进制编码到一套符号的映射。

二、UTF-8
因为现存编码不能在多语言电脑环境中使用,而且字符数有局限。所以诞生了Unicode(统一码、万国码、国际码、单一码)。Unicode是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。
一个字符的Unicode编码是确定的。但Unicode的实现方式不同于编码方式,Unicode的实现方式成为Unicode转换格式(Unicode Transformation Format,UTF),在实际传输过程中,由于不同系统平台的设计不一定都是一致的,且出于节省空间的目的,Unicode的编码实现方式也有所不同。其中有一种UTF-8编码,它是一种变长编码,UTF-8编码的思想是不同的Unicode字符采用变长字节序列编码:基本拉丁字母、数字和标点符号使用1个字节,大部分的欧洲和中东手写字母使用2个字节,韩语、中文和日本象形文字使用3个字节,emoji表情使用4个字节

三、MySQL的字符集
UTF8可变长度编码,使用1到4个字节来存储。但MySQL 5.1及以前的版本,对UTF-8的支持并不彻底,它的utf8只是3个字节字符集,有些文字符号是不能存储的,比如emoji表情。
MySQL 5.5增加了字符集utf8mb4(4-Byte UTF-8 Unicode Encoding),可以存储一些MySQL utf8不能存储的字符。

四、如何支持emoji表情,有以下2中方案:

  • 方案一:设置字段的类型为utf8mb4
# 建表时指定
CREATE TABLE `demo` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
 `content` varchar(1024) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '文本内容',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='demo表';
# 修改表字段类型
alter table demo MODIFY COLUMN content varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  • 方案二:设置表的类型为utf8mb4
# 建表时指定
CREATE TABLE `demo` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
 `content` varchar(1024) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='demo表';
# 修改表类型
ALTER TABLE demo CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

注意:
MySQL的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级。更低级别的配置会继承更高级别的配置。例如:创建了一个数据库,不指定字符集,那么它会继承服务器级的默认字符集。所以,如果设定了表的字符集,字段的字符集就不用再设置,即两种方案选择一种即可。
有些项目在jdbc连接串里指定了编码,例如:jdbc:mysql://127.0.0.1/demodb?characterEncoding=UTF-8,这种需要将字符集的设置去掉。

五、曲线救国,数据库不需要做任何设置,使用工具

# 1 引入jar依赖
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>3.2.0</version>
</dependency>
# 2 api使用
EmojiParser.parseToAliases(string); 将表情符号转为字符
EmojiParser.parseToUnicode(string); 将字符转为表情符号

这种方法狸猫换太子,堪称经典。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值