存储字符集 utf8 和 utf8mb4

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符,也就是 Unicode 中的基本多文本平面。

要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。

如果数据库默认字符集不是 utf8mb4,那么可以在创建数据库时指定字符集:

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

查看编码格式

mysql> show variables like "%char%";
+--------------------------------------+--------------------------------+
| Variable_name            | Value             |
+--------------------------------------+--------------------------------+
| character_set_client         | utf8mb4            |
| character_set_connection       | utf8mb4            |
| character_set_database        | utf8mb4            |
| character_set_filesystem       | binary             |
| character_set_results        | utf8mb4            |
| character_set_server         | utf8mb4            |
| character_set_system         | utf8              |
| character_sets_dir          | /usr/share/mysql-8.0/charsets/ |
| validate_password.special_char_count | 1               |
+--------------------------------------+--------------------------------+
9 rows in set (0.00 sec)

MySQL 配置文件中字符集相关变量

  • character_set_client:客户端请求数据的字符集
  • character_set_connection:从客户端接收到数据,然后传输的字符集
  • character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server 指定的字符集,这个变量建议由系统自己管理,不要人为定义。
  • character_set_filesystem:把操作系统上的文件名转化成此字符集,即把 character_set_client 转换 character_set_filesystem, 默认 binary 是不做任何转换的
  • character_set_results:结果集的字符集
  • character_set_server:数据库服务器的默认字符集
  • character_set_system:存储系统元数据的字符集,总是 utf8,不需要设置

排序字符集 

utf8mb4_unicode_ci 和 utf8mb4_general_ci

1、准确性

utf8mb4_unicode_ci 是基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序

utf8mb4_general_ci 没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。

但是绝大多数情况下,这些特殊字符的顺序并不需要那么精确。

2、性能

utf8mb4_general_ci 在比较和排序的时候更快

utf8mb4_unicode_ci 在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。

但是在绝大多数情况下,不会发生此类复杂比较。相比选择哪一种 collation,使用者更应该关心字符集与排序规则在 db 里需要统一。

utf8mb4_0900_ai_ci

推荐用 utf8mb4_unicode_ci,但是用 utf8mb4_general_ci 也没啥问题。

MySQL 8.0 默认的是 utf8mb4_0900_ai_ci,属于 utf8mb4_unicode_ci 中的一种,具体含义如下:

  • uft8mb4 表示用 UTF-8 编码方案,每个字符最多占 4 个字节。
  • 0900 指的是 Unicode 校对算法版本。(Unicode 归类算法是用于比较符合 Unicode 标准要求的两个 Unicode 字符串的方法)。
  • ai 指的是口音不敏感。也就是说,排序时 e,è,é,ê 和 ë 之间没有区别。
  • ci 表示不区分大小写。也就是说,排序时 p 和 P 之间没有区别。

utf8mb4 已成为默认字符集,在 MySQL 8.0.1 及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则。以前,utf8mb4_general_ci 是默认排序规则。由于 utf8mb4_0900_ai_ci 排序规则现在是默认排序规则,因此默认情况下新表格可以存储基本多语言平面之外的字符。现在可以默认存储表情符号。如果需要重音灵敏度和区分大小写,则可以使用 utf8mb4_0900_as_cs 代替。

参考:

https://www.rednn.com/createsite/202003/26108.html

https://www.jb51.net/article/186609.htm

MySQL几种编码格式的区别(utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci 、utf8mb4_0900_ai_ci)相关推荐

  1. MySQL 编码:utf8 与 utf8mb4,utf8mb4_unicode_ci 与 utf8mb4_general_ci

    参考:mysql字符集小结 utf8mb4 已成为 MySQL 8.0 的默认字符集,在MySQL 8.0.1及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则. 新项目只考虑 u ...

  2. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别

    ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...

  3. MySQL编码格式统一为UTF8

    一般在安装MySQL后,将字符编码格式统一为UTF8,方便后续操作. 1.查看字符编码方式 show variables like '%char%' 结果如下: 如上图所示,编码方式有utf8.Lat ...

  4. MySQL 不等于的三种使用及区别

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ MySQL中常用到判断符 ...

  5. MySQL create database 新建utf-8/utf8mb4编码 数据库

    创建utf8编码 数据库 CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; ...

  6. MySQL DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci utf8mb4_bin utf8mb4_general_ci

    在mysql中执行show create table <tablename>指令,可以看到一张表的建表语句,example如下: CREATE TABLE `table1` (`id` b ...

  7. mysql 中的 utf_Mysql中的utf-8竟然是假的!

    最近遇到一个神奇的问题,在往数据库中插入聊天表情的时候,离奇的报错,我的客户端.服务器.数据库都是UTF-8 编码的,所以应该不会出现问题.最终发现根本的原因在于MySQL 的"utf8&q ...

  8. c++读取utf8文件_在MySQL中你是否使用过utf8,有没有遇到这样的bug那就要注意了...

    原文链接:https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434 最近我遇到了一个bug,我试着 ...

  9. Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data

    在常见业务开发中,POST请求常常在这些地方使用:前端表单提交时.调用接口代码时和使用Postman测试接口时.我们下面来一一了解: 一.前端表单提交时 application/x-www-form- ...

最新文章

  1. html防止iOS将数字识别为电话号码
  2. 第五节 suid/ sgid /sbit /which /locate / find /stat / ln / uname -a
  3. 汇编:转移目的地址在内存中
  4. 神经网络的参数迁移和共同本征态
  5. Ubuntu/Deepin--How to remove packeges?
  6. linux 定时执行shell脚本 定时任务
  7. WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机
  8. Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration.
  9. 对dedecms、php168,phpcms、VeryCMS、DiyPage五款开源整站系统的简单评点(
  10. Java核心类笔记(字符串方法、StringBuilder(Joiner)、包装、JavaBean、枚举、Math、随机数)
  11. Ubuntu 18安装谷歌浏览器
  12. 网络爬虫(网络蜘蛛)之网页抓取
  13. 高一信息技术认识计算机网络课件,中图版高中信息技术认识计算机网络课件.pptx...
  14. 计算机一级单元格填充,电脑Excel表格怎么对不连续的单元格进行批量填充
  15. 【BugKu-CTF论坛writeup(杂项)】妹子的陌陌
  16. Twitter账号老被封?一文教会你怎么养号
  17. 道翰天琼认知智能为您解密:Rust语言杀疯了!前有谷歌高薪争夺 Rust 人才,Facebook再官宣加入Rust基金会 「自2016年以来,Facebook 就已开始使用 Rust,并应用在开发
  18. 欧几里得扩展欧几里得
  19. ei会议被检索的时间一般多久,中文期刊论文有doi吗
  20. php网页设计课程设计dreamweaver8_Dreamweaver8+PHP动态网站开发从入门到精通(附光盘)...

热门文章

  1. Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:
  2. LeetCode——209.长度最小的子数组
  3. Far_planner 代码系列(11)
  4. 郑州大学2008级数据库原理(科学出版社,范明)知识要点
  5. 怎么注册个人邮箱地址?邮箱为什么收不到邮件?
  6. BCELoss() RuntimeError: the derivative for ‘target‘ is not implemented
  7. 解决undefinedcss/modules/layer/default/layer.css
  8. 桌面IE删除不了的解决方案
  9. Windows8用起来好别扭
  10. Google受隐私问题困扰 或放弃欧洲版街景服务