MySQL系统变量和字符集

书名《MySQL是怎样运行的:从根儿上理解MySQL》可自行百度

以下是知识点总结

重新认识Mysql

MySQL是一个C/S架构的软件。

在Windows安装后首先注册成服务,然后会在开机后自启动。

启动MySQL服务端。

直接在bin目录下执行 mysqld 或者在配置文件my.ini中设置一些默认的启动参数。

  • 在MySQL安装目录的bin下使用mysqld指令启动MySQL服务,Windows版没有mysqld_safe这些,它会在最后调用mysqld,但是会在其之前启动监控程序,本质是一样的。
  • 定义环境变量,直接使用mysqld,就可以在随地使用bin下的命令。比较方便。

启动MySQL客户端。

在bin目录下,使用命令 mysql -uroot -p1111 即使用TCP/IP连上本地的Mysql,如果需要指定IP和端口的话 mysql -hlocalhost -P3306 -uroot -p11111

  • 一种是TCP/IP。指定IP和端口,使用TCP/IP和服务端连接和交互。
  • 其他的管道和共享内存,类UNIX使用socket连接。

服务器处理客户端请求

  1. 首先客户端向服务器端发送内容。
  2. 服务器端接收后通过连接管理,分配一个连接给当前请求的进程。
  3. 服务器端进行解析,语句优化,缓存匹配(匹配成功就会直接返回)。
  4. 服务器端进行进行解析语句,形成一个explain,然后由存储引擎去执行explain,然后返回结果。

常用的存储引擎

  • InnoDB,即是mysql 的默认存储引擎,支持事务回滚。
  • MyISAM,等等。

Mysql的调控按钮

启动选项的两种方式

  • 命令行的方式
  • 配置文件方式

一种是服务端的启动,即mysqld 的方式启动。

我们可以直接在命令行后面使用 –参数=参数1。具体参数可以使用 mysqld –help

有配置文件的方式,配置文件存储各种命令的启动参数,并在启动时对启动参数进行初始化。

[En]

There is the way of the configuration file, the configuration file stores the startup parameters of various commands, and initializes the startup parameters when starting.

举例mysqld,mysqld配置文件中会加载[mysqld]组和[server]组的启动参数。当出现重复的启动参数时,就会后续加载的参数就会直接覆盖前面的参数。加载顺序是[mysqld] -> [server] -> 命令行。

系统变量

其中呢启动项大部分是设置一些系统变量的。系统变量就是调控mysql运行的重要参数。比如设置存储引擎,设置最大接收的线程数。

同时呢系统变量也分两类GLOBAL和SESSION。

GLOBAL的系统变量就是MySQL服务器的系统变量,当有一个新的客户端连接到服务器时,就会为客户端创建一个SESSION,并用GLOBAL初始化SESSION系统变量。客户端可以根据自身需求来更新系统变量,如果希望更改全局的系统变量就变更GLOBAL。

set @@GLOBAL.default-storage-engine=InnoDB
这样更新全局后续连接都会根据此更新,已经有的连接不会变更。同时变更当前会话的就改成SESSION

状态变量

简而言之就是MySQL记录当前服务端的状态的变量,这些状态变量只能由MySQL来设置,客户端可以对其进行查看来监控MySQL。

字符集和比较规则

我们举例客户端向服务端发送一段SQL。

为了在过程中进行通信,字符串需要按照一定的规则编码成0101,然后传输到服务器,服务器需要根据其编码规则将其解码并还原为字符串。

[En]

In order to communicate in the process, a string needs to be encoded into 0101 according to certain rules, and then transmitted to the server, which needs to decode and restore it to the string according to its coding rules.

MySQL中支持很多的字符集,可以使用 show charset; 命令进行查看。

MySQL8.0.22中支持41种字符集。下面列举一部分,最常见和最熟知的就是utf8了,但是在MySQL中utf8是对创始人对其进行的删减,真正的是utf8mb4需要注意。

utf32 UTF-32 Unicode utf32_general_ci 4
utf8 UTF-8 Unicode utf8_general_ci 3
utf8mb4 UTF-8 Unicode utf8mb4_0900_ai_ci 4

每个字符集对应于各种比较规则,但每个比较规则仅对应一个字符集。

[En]

Each character set corresponds to a variety of comparison rules, but each comparison rule corresponds to only one character set.

字符集分为多个级别。

  1. 服务端的字符集,为最高级别的字符集。

MySQL系统变量和字符集
  1. 数据库的字符集,可以指定,也可以默认为服务端的字符集
  2. 表的字符集,可以指定,也可以默认为数据库的字符集
  3. 列的字符集,同样默认表的字符集

客户端和服务器端通信中的字符集

客户端向服务器发送信息的过程

[En]

The process by which a client sends information to a server

  1. 首先客户端发送字符串,先经过操作系统编码(Windows编码方式为gbk,类unix为uft8)后,发送到服务端。
  2. 服务端接收到请求,根据character_set_client的字符集进行解码,然后转码成character_set_connection的字符集,然后由character_set_connection交给存储引擎。
  3. 存储引擎得到结果后,返回根据character_set_result进行编码发送到客户端。

在实际连接中,上述系统变量通常与操作系统的字符集相同。

[En]

In the actual connection, the system variables mentioned above are usually the same as the character set of the operating system.

比较规则

比较规则就是比较规则。当排序预期与我们预期的不同时,可能是比较规则的错误,可能需要更换比较规则。

[En]

The comparison rule is the comparison rule. When the sorting expectation is different from what we expected, it may be the error of the comparison rule, and the comparison rule may need to be replaced.

Original: https://www.cnblogs.com/duizhangz/p/16282198.html
Author: 大队长11
Title: MySQL系统变量和字符集

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505375/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球