一个 emoji 引发的思考

MySQL 字符集相关梳理

故事背景

今天在做项目数据迁移,涉及到将 A 表中的某个字段复制到 B 表,本地(MAC Mysql 8.0.25)完全没问题,但是在服务器上执行迁移文件时报错:在这里插入图片描述
经过一番查阅资料发现是由于 emoji 字符导致的,由于服务器中 Mysql 版本为 5.6 在 A 表中设置的字符集为 utf8mb4 而 B 表中默认使用 utf8,utf8 最大只支持三个字节,而 emoji 表情字节占用大于三个,因此导入失败。下面关于 MySQL 字符相关做如下梳理:

MySQL 字符集

版本与字符集

MySQL5.5 版本在 my.ini 上修改 character_set_server 为 utf8

MySQL8.0 以上版本默认 character_set_server 为 utf8mb4

utf8mb4 和 utf8 的区别
  • utf8mb4 是 utf8 的扩展版,支持更多的字码形式

  • utf8mb4 最大支持 4 个字节,utf8 最大支持三个字节

其他编码问题

ASCII 编码:一个英文字母(不区分大小写)占用一个字节的空间,一个中文汉字占用两个字节的空间。一个二进制的数字序列,在计算机中作为一个数字单元存储是,一般为 8 位二进制,换算为十进制,最小值0,最大值255

UTF-8:一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间。

Unicode(万国码):一个英文占用两个字节的存储空间,一个中文(含繁体)占用两个字节的存储空间

UTF-16:一个英文字符或一个汉字字符存储都需要占用两个字节的存储空间

UTF-32L:在世界上任何字符的存储都需要占用4个字节的存储空间

Mysql 查看和修改数据库字符集方法

查看字符集
  1. 查看 Mysql 数据库服务器和数据库字符集
# 方法一:查看数据库字符集
show variables like 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值