本文主要介绍MySQL代码utf8和utf8mb4 utf8mb4_unicode_ci和utf8mb4_general_ci的相关知识。本文通过示例代码向您详细介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考一下。
参考:mysql字符集概述
Utf8mb4已经成为MySQL 8.0的默认字符集,utf8mb4_0900_ai_ci是MySQL 8.0.1及以后版本的默认归类。
新项目只考虑 utf8mb4
UTF-8编码是一种变长编码机制,可以存储1~4个字节的字符。
因为历史问题,MySQL中的utf8编码并不是真正的UTF-8,而是阉割版,最大长度只有3个字节。当遇到4字节的UTF-8编码,如表情符号字符或复杂汉字时,会导致存储异常。
从5.5.3开始,MySQL开始用utf8mb4编码实现完整的UTF-8,其中mb4代表最多字节4,最多占用4个字节。8.0以后,utf8mb4将作为某个版本的默认字符编码。
设置服务器默认字符集为 utf8mb4
创建数据库时,如果没有指定字符集,将采用服务器的默认字符集。将服务器的默认字符集设置为utf8mb4可以提高便利性。
编辑 MySQL 的配置文件
只需要考虑五个系统变量。如果将这五个变量更改为utf8mb4,修改将会成功:
角色集客户端
角色集连接
字符集结果
角色集服务器
字符集数据库
My.cnf是MySQL的配置文件。请记住在修改之前进行备份:
vi /etc/my.cnf
在【mysqld】下添加default-character-set=utf8后,服务器无法启动,令人费解。以后这样改就好了(MySQL5.7):
[mysqld]
init _ connect=' SET collation _ connection=utf8mb 4 _ unicode _ ci '
init_connect='设置名称utf8mb4 '
character-set-server=utf8mb4
collation-server=utf8mb 4 _ unicode _ ci
跳过字符集客户端握手
.
[客户]
default-character-set=utf8mb4
MySQL8.0默认已经是utf8mb4了,不用改了。如果要更改它,配置文件如下:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/MySQL/MySQL . sock
log-error=/var/log/mysqld.log
PID-file=/var/run/mysqld/mysqld . PID
character-set-server=utf8mb4
[客户]
default-character-set=utf8mb4
重启并确认
如您所见,系统代码、连接代码、服务器和客户端代码都被设置为UTF-8:
mysql显示像“%char%”这样的变量;
- -
|变量名称|值|
- -
| character_set_client | utf8mb4 |
| character _ set _ connection | utf8mb 4 |
| character _ set _ database | utf8mb 4 |
|字符集文件系统|二进制|
| character _ set _ results | utf8mb 4 |
| character_set_server | utf8mb4 |
|字符集系统| utf8 |
| character _ sets _ dir |/usr/share/MySQL-8.0/charsets/|
| validate _ password . special _ char _ count | 1 |
- -
集合中的9行(0.00秒)
MySQL 中字符集相关变量
Character_set_client:客户端请求的数据的字符集
Character_set_connection:从客户端接收数据然后传输数据的字符集。
Character_set_database:默认数据库的字符集,无论默认数据库如何变化,都是这个字符集;如果没有默认数据库,则使用character_set_server指定的字符集。这个变量建议由系统自己管理,不要人为定义。
Character_set_filesystem:把操作系统上的文件名转换成这个字符集,也就是把character_set_client转换成character_set_filesystem。默认的二进制文件不做任何转换。
字符集结果:结果集的字符集
Character_set_server:数据库服务器的默认字符集
Character_set_system:存储系统元数据的字符集,总是utf8,不需要设置。
创建数据库时指定字符集为 utf8mb4
如果数据库的默认字符集不是utf8mb4,您可以在创建数据库时指定字符集:
创建数据库mydb字符集utf8mb 4 COLLATE utf8mb 4 _ unicode _ ci;
排序字符集 collation
除了存储字符之外,还需要对它们进行排序或大小比较。推荐Utf8mb4_unicode_ci,但是utf8mb4_general_ci没什么问题。
MySQL 8.0默认为utf8mb4_0900_ai_ci,属于utf8mb4_unicode_ci之一。具体含义如下:
Uft8mb4表示UTF-8编码方案,每个字符最多占用4个字节。
000是指Unicode校对算法版本。(Unicode排序算法是一种用于比较两个符合Unicode标准要求的Unicode字符串的方法)。
Ai的意思是不敏感的口音。也就是说排序的时候e,,,和没有区别。
Ci表示不区分大小写。也就是排序的时候p和p没有区别。
Utf8mb4已经成为默认字符集,utf8mb4_0900_ai_ci是MySQL 8.0.1及更高版本中的默认归类。以前,utf8mb4_general_ci是默认的排序规则。因为utf8mb4_0900_ai_ci排序规则现在是默认排序规则,所以默认情况下,新表可以存储基本多语言平面之外的字符。表情符号现在可以默认存储。如果需要区分重音和大小写,可以用utf8mb4_0900_as_cs代替。
总结
关于mysql代码utf8和utf8mb4 utf8mb4_unicode_ci和utf8mb4_general_ci的这篇文章到此为止。有关MySQL代码utf8和utf8mb4的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。