MySQL几种编码格式的区别(utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci 、utf8mb4_0900_ai_ci)
存储字符集 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)相关推荐
- MySQL 编码:utf8 与 utf8mb4,utf8mb4_unicode_ci 与 utf8mb4_general_ci
参考:mysql字符集小结 utf8mb4 已成为 MySQL 8.0 的默认字符集,在MySQL 8.0.1及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则. 新项目只考虑 u ...
- ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别
ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...
- MySQL编码格式统一为UTF8
一般在安装MySQL后,将字符编码格式统一为UTF8,方便后续操作. 1.查看字符编码方式 show variables like '%char%' 结果如下: 如上图所示,编码方式有utf8.Lat ...
- MySQL 不等于的三种使用及区别
文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ MySQL中常用到判断符 ...
- MySQL create database 新建utf-8/utf8mb4编码 数据库
创建utf8编码 数据库 CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; ...
- MySQL DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci utf8mb4_bin utf8mb4_general_ci
在mysql中执行show create table <tablename>指令,可以看到一张表的建表语句,example如下: CREATE TABLE `table1` (`id` b ...
- mysql 中的 utf_Mysql中的utf-8竟然是假的!
最近遇到一个神奇的问题,在往数据库中插入聊天表情的时候,离奇的报错,我的客户端.服务器.数据库都是UTF-8 编码的,所以应该不会出现问题.最终发现根本的原因在于MySQL 的"utf8&q ...
- c++读取utf8文件_在MySQL中你是否使用过utf8,有没有遇到这样的bug那就要注意了...
原文链接:https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434 最近我遇到了一个bug,我试着 ...
- Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data
在常见业务开发中,POST请求常常在这些地方使用:前端表单提交时.调用接口代码时和使用Postman测试接口时.我们下面来一一了解: 一.前端表单提交时 application/x-www-form- ...
最新文章
- html防止iOS将数字识别为电话号码
- 第五节 suid/ sgid /sbit /which /locate / find /stat / ln / uname -a
- 汇编:转移目的地址在内存中
- 神经网络的参数迁移和共同本征态
- Ubuntu/Deepin--How to remove packeges?
- linux 定时执行shell脚本 定时任务
- WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机
- Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration.
- 对dedecms、php168,phpcms、VeryCMS、DiyPage五款开源整站系统的简单评点(
- Java核心类笔记(字符串方法、StringBuilder(Joiner)、包装、JavaBean、枚举、Math、随机数)
- Ubuntu 18安装谷歌浏览器
- 网络爬虫(网络蜘蛛)之网页抓取
- 高一信息技术认识计算机网络课件,中图版高中信息技术认识计算机网络课件.pptx...
- 计算机一级单元格填充,电脑Excel表格怎么对不连续的单元格进行批量填充
- 【BugKu-CTF论坛writeup(杂项)】妹子的陌陌
- Twitter账号老被封?一文教会你怎么养号
- 道翰天琼认知智能为您解密:Rust语言杀疯了!前有谷歌高薪争夺 Rust 人才,Facebook再官宣加入Rust基金会 「自2016年以来,Facebook 就已开始使用 Rust,并应用在开发
- 欧几里得扩展欧几里得
- ei会议被检索的时间一般多久,中文期刊论文有doi吗
- php网页设计课程设计dreamweaver8_Dreamweaver8+PHP动态网站开发从入门到精通(附光盘)...
热门文章
- Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:
- LeetCode——209.长度最小的子数组
- Far_planner 代码系列(11)
- 郑州大学2008级数据库原理(科学出版社,范明)知识要点
- 怎么注册个人邮箱地址?邮箱为什么收不到邮件?
- BCELoss() RuntimeError: the derivative for ‘target‘ is not implemented
- 解决undefinedcss/modules/layer/default/layer.css
- 桌面IE删除不了的解决方案
- Windows8用起来好别扭
- Google受隐私问题困扰 或放弃欧洲版街景服务