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)

大家都在看

  • MySQL8.0.26的安装与配置——详细教程

    网上的教程有很多,基本上大同小异。 但是安装软件有时就可能因为一个细节安装失败。 我也是综合了很多个教程才安装好的,所以本教程可能也不是普遍适合的。 二、Mysql 配置 1.解压…

    数据库 2023年6月9日
    093
  • Django REST framework JWT

    我们在验证完用户的身份后(检验用户名和密码),需要向用户签发JWT,在需要用到用户身份信息的时候,还需核验用户的JWT。 关于签发和核验JWT,我们可以使用Django REST …

    数据库 2023年6月14日
    095
  • Consul 入门-gRPC 服务注册与发现

    前言 假如我有钱,我&am…

    数据库 2023年6月6日
    097
  • Linux日志管理

    日志管理 日志文件 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来…

    数据库 2023年6月16日
    085
  • leetcode 83. Remove Duplicates from Sorted List 删除排序链表中的重复元素(简单)

    一、题目大意 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head = [1,1,2]输出:[1,…

    数据库 2023年6月16日
    097
  • SpringBoot 集成 JSP

    导致我写这个博客的原因是 在SpringBoot支持的模板引擎thymeleaf 下 前台页面仅支持HTML 可能用一些其他的前端框架 1、我们首先在IDEA中搭建一个项目,搭建项…

    数据库 2023年6月9日
    0136
  • form表单内容序列化的两种方法

    form表单内容序列化 form表单自带两种方法serialize()方法和serializeArray()方法 1.serialize()方法 描&…

    数据库 2023年6月14日
    084
  • 当mysql表从压缩表变成普通表会发生什么

    本文章做了把mysql表从压缩表过渡到普通表的实验过程,看看压缩表变成普通表会发生什么?本文针对mysql5.7和mysql8分别进行了实验。 1、什么是表压缩 在将压缩表引入普通…

    数据库 2023年5月24日
    065
  • 4、Idea设置显示多行文件

    使用IDEA时,可能会没有注意到,一旦打开过多的Java文件时,默认会堆积在一行显示,就像浏览器打开了多个标签一样,此时需要通过右侧箭头筛选的方式来选择其他文件。为了解决这一问题,…

    数据库 2023年6月6日
    0103
  • Linux安装 MySQL

    一、下载yum仓库 1、说明:mysql官方提供所有版本的仓库,要使用yum方式安装的话需要提前下载该仓库列表 2、官方下载链接:https://dev.mysql.com/dow…

    数据库 2023年6月9日
    087
  • Docker安装Mysql

    1、在docker hub 上查看要下载的mysql镜像名称 dockerHub官网地址 在上方搜索栏里输入mysql 找到要拉取的镜像版本,在tag下找到版本 回到虚拟机界面,执…

    数据库 2023年6月16日
    091
  • MySQL源码解析之执行计划

    MySQL执行计划介绍 MySQL执行计划代码概览 MySQL执行计划总结 一、MySQL执行计划介绍 在MySQL中,执行计划的实现是基于 JOIN和 QEP_TAB这两个对象。…

    数据库 2023年5月24日
    089
  • win10彻底永久关闭自动更新的方法【已验证有效】

    [知识整理/来源网络] 原文链接:win10彻底永久关闭自动更新的方法【已验证有效】_电脑知识-电脑配置网 (dnpz.net) win10的自动更新可谓是非常顽固,很多用户在网上…

    数据库 2023年6月9日
    0114
  • Spring Boot 整合Hibernate Validator

    Spring Boot 整合Hibernate Validator 代码仓库: https://github.com/Rain-with-me/JavaStudyCode/tree…

    数据库 2023年6月14日
    0107
  • MyBatis-Plus修改数据,会不会把其他字段置为null

    前两天在用MyBatis-Plus写了一张单表的增删改查,在写到修改的时候,就突然蹦出一个奇怪的想法。 MyBatis-Plus的BaseMapper中有两个关于修改的方法。如下:…

    数据库 2023年6月11日
    0117
  • pg substring 正则提取子串

    官方案例: 测试: posted @2022-02-08 19:48 cheng_blog 阅读(218 ) 评论() 编辑 Original: https://www.cnblo…

    数据库 2023年6月16日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球