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)

大家都在看

  • 前端常用函数封装

    常用函数封装 获取某日期若干个工作日后的日期 * 参数: * time: [String] 给&#x5B9…

    数据库 2023年6月11日
    091
  • leetcode 148. Sort List 排序链表(中等)

    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head = [4,2,1,3]输出:[1,2,3,4] 示例 2: 输入:head …

    数据库 2023年6月16日
    084
  • mac(m1)配置my.cnf

    今天开始学习了数据库,在安装MySQL之后启动一直报错,然后在网上找了很多解决方法,最后用以下方法解决 对于习惯了windows的小伙伴来说,直接去安装目录里边修改my.ini就可…

    数据库 2023年6月16日
    076
  • jenkins-配置python

    1. 进入”Dashboard”界面,点击左侧”构建执行状态” 2. 点击列表设置图标 3. 勾选”Environmen…

    数据库 2023年6月14日
    068
  • MySQL删除重复数据

    重复数据如图所示 自关联,保留id最小的那一条,其它的都删除 DELETE t1 FROM invest_year t1, invest_year t2 WHERE t1.pro_…

    数据库 2023年6月14日
    091
  • MySQL45讲之InnoDB刷脏策略

    本文介绍 InnoDB 的刷脏控制策略,它是如何控制刷脏速率的,以及一些相关参数。 了解 MySQL 的刷脏策略有什么意义? 当一条正确的 SQL 执行时偶尔延迟较高,无法复现场景…

    数据库 2023年5月24日
    078
  • 深入汇编指令理解Java关键字volatile

    volatile是什么 volatile关键字是Java提供的一种轻量级同步机制。它能够保证可见性和有序性,但是不能保证原子性 可见性 对于volatile的可见性,先看看这段代码…

    数据库 2023年6月16日
    081
  • linux-centos常用命令

    01-centos-常用命令 1.centos防火墙 关闭 systemctl stop firewalld 禁止开机启动防火墙 systemctl disable firewal…

    数据库 2023年6月11日
    098
  • 刚入职没多久,连夜手写了一个代码生成器,项目开发速度瞬间屌炸了!

    一、简介 最近刚入职一个新团队,还没来得及熟悉业务,甲方爸爸就要求项目要在2个月内完成开发并上线! 本想着往后推迟1个月在交付,但是甲方爸爸不同意,只能赶鸭子上架了! 然后根据业务…

    数据库 2023年6月14日
    0108
  • JUC学习

    如何正确停止线程? 停止线程应该是一种通知协作的方式,比如interrupt,但是它仅仅是通知线程,线程拥有完全的自主权,根据自身业务来判断什么时候停止,因为如果选择立即停止就可能…

    数据库 2023年6月16日
    0101
  • Java学习-第一部分-第二阶段-第三节:异常

    异常 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 运行下面的代码,看看有什么问题->引出异常和异常处理…

    数据库 2023年6月11日
    0123
  • Java处理.tif或.tiff图片

    前言 Java将图片读取到内存用的是ImageIO,默认可以处理的图片格式如下: undefined ImageIO.getWriterFileSuffixes() //此方法返回…

    数据库 2023年6月9日
    078
  • windows环境下nacos集群启动报错-无法启动内嵌的tomcat

    解决办法:使用64位jdk切记不要使用32位。切记不要使用32位。切记不要使用32位。 Original: https://www.cnblogs.com/journeyhch/p…

    数据库 2023年6月11日
    085
  • MySQL日志系统bin log、redo log和undo log

    MySQL日志系统bin log、redo log和undo log 今人不见古时月,今月曾经照古人。 简介:日志是MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息…

    数据库 2023年6月14日
    087
  • MongoDB,入门看这一篇足矣!

    一、介绍 在介绍 MongoDB 之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识! 最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消…

    数据库 2023年6月14日
    082
  • Redis和Mysql保持数据一致性

    1、简述 在高并发的场景下,大量的请求直接访问Mysql很容易造成性能问题。所以,我们都会用Redis来做数据的缓存,削减对数据库的请求。但是,Mysql和Redis是两种不同的数…

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