写点什么

MySQL 字符集和排序规则详解

作者:C++后台开发
  • 2023-01-07
    湖南
  • 本文字数:1680 字

    阅读完需:约 6 分钟

MySQL字符集和排序规则详解

一. 相关概念

1. 字符集

 MySQL 提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与 MySQL 实例的交互相关,排序规则和字符串的对比规则相关

(1). 字符集的设置可以在 MySQL 实例、数据库、表、列四个级别

(2). MySQL 设置字符集支持在 InnoDB, MyISAM, Memory 三个存储引擎

(3). 查看当前 MySQL 支持的字符集的方式有两种,一种是通过查看 information_schema.character_set 系统表,一种是通过命令【 show character set; 】查看。

2. 排序规则

 每个指定的字符集都会有一个或多个支持的排序规则,可以通过两种方式查看,一种是查看 information_schema.collations 表,另一种是通过【show collation】命令查看

(1). 查看 utf8mb4 字符集对应的排序规则有哪些。

show collation where charset ='utf8mb4';

​(2).剖析排序规则

排序规则的命令通常是以对应的字符集的名字为开头,并以自己的特定属性结尾,比如排序规则 utf8_general_ci 和 latin1_swedish_ci 就分别是对应 utf8 和 latin1 字符集的排序规则

• 当排序规则特指某种语言时,则中间的部分就为这种语言的名字,比如 utf8_turkish_ci 和 utf8_hungarian_ci 就代表 UTF8 字符集中的土耳其语和匈牙利语

• 排序规则名字的结尾字符代表是否大小写敏感,重音敏感以及是否是二进制的

PS:

A. 当仅指定了字符集而没有指定排序规则时,则会使用该字符集的默认排序规则

B. 当仅指定了排序规则而没有字符集时,则在该排序规则名称上含有的字符集会被使用

C. 当数据库创建时没有指定这两项,则使用实例级别的字符集和排序规则

更多 C++后台开发技术点知识内容包括 C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux 内核,TCP/IP,协程,DPDK 多个高级知识点。

C/C++Linux服务器开发高级架构师/C++后台开发架构师​免费学习地址

【文章福利】另外还整理一些C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以点击领取

二. 实操

1. 查看数据库编码

 windows 下 mysql5.7 默认编码如下图

show variables like '%character%';

​PS:

(1). 每个数据库客户端连接都有自己的字符集和排序规则属性,客户端发送的语句的字符集是由 character_set_client 决定,而与服务端交互时会根据 character_set_connection 和 collation_connection 两个参数将接收到的语句转化。当涉及到显示字符串的比较时,由 collation_connection 参数决定,而当比较的是字段里的字符串时则根据字段本身的排序规则决定

(2). character_set_result 参数决定了语句的执行结果以什么字符集返回给客户端

(3). 客户端可以很方便的调整字符集和排序规则,比如使用 SET NAMES'charset_name' [COLLATE 'collation_name']表明后续的语句都以该字符集格式传送给服务端,而执行结果也以此字符集格式返回。

SET character_set_client = utf8mb4; SET character_set_results = utf8mb4; SET character_set_connection = utf8mb4;

2. 安装完 MySQL 后的通用配置

 MySQL5.7 以后,推荐使用 utf8mb4 编码来代替 utf8 编码。

 无论 window 下还是 linux 下的 mysql 安装完成后首先要做的就是修改编码,下面蓝色部分是需要配置的。修改完成后,重启 mysql 服务,查看编码。

[client]default-character-set=utf8mb4
[mysql]default-character-set=utf8mb4
[mysqld]# 设置client连接mysql时的字符集,防止乱码init_connect='SET NAMES utf8mb4'init_connect='SET collation_connection = utf8mb4_general_ci'
# 数据库默认字符集character-set-server=utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应collation-server=utf8mb4_general_ci
# 跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置 (忽略即可)#skip-character-set-client-handshake
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!(忽略即可)#skip-name-resolve
复制代码



原文链接:第六节:MySQL 字符集和排序规则详解 - Yaopengfei - 博客园

用户头像

C/C++后台开发技术交流qun:720209036 2022-05-06 加入

还未添加个人简介

评论

发布
暂无评论
MySQL字符集和排序规则详解_MySQL_C++后台开发_InfoQ写作社区