启动选项和系统变量
-
mysql配置方式之一,在命令行上使用选项配置。有长形式和短形式之分,同时等号=前后不能有空格。对于常用的选项提供短形式,也就是选项首字母前加‘-’前缀。这种方式只对当次启动有效。
-
mysql配置方式之二,在配置文件中使用选项。会按照一定路径寻找配置文件,ini,cnf都为配置文件。配置文件内容可以分组。可以通过命令行指定配置文件的优先级,也可以指定使用特定的配置文件。
-
mysq配置系统变量。查询系统变量,SHOW VARIABLES [LIKE 匹配的模式]; 可以通过启动选项或配置文件来设置系统变量。
-
mysql系统变量的作用范围,GLOBAL和SESSION.
-
mysql状态变量,自动生成,只支持查看。
字符集和比较规则
- 打卡: 1.字符集和比较规则,字符集需要界定清楚字符范围,映射规则,比较规则是转化成二进制后比较大小的规则,同一种字符集可以有多种比较规则。
- 一些重要的字符集。ASCII < ISO 8859-1 < GB2312 < GBK < utf8
- MySQL支持的字符集和排序规则。基本所有字符集都支持,但常用的就两个utf8mb3和utf8mb4;比较规则查看 SHOW COLLATION LIKE ‘utf8_%‘, 名称后缀意味着该规则是否区分重音和大小写;
- MySQL四个级别的字符集和比较规则,服务器级别,数据库级别,表级别,列级别。当插入的数据不是字符集所支持的数据,则会报错或乱码。
- 修改字符集或比较规则的任一方,另外一方都会自动修改。
- MySQL中字符集的转换,系统变量character_set_client为服务器解码请求时使用的字符集,系统变量character_set_connection 为服务器处理请求时会把请求字符串转为这个字符集,系统变量character_set_results为服务器向客户端返回数据时使用的字符集。统一设置这三个系统变量的值为同一个字符集 SET NAMES utf8;
- 如果character_set_connection代表的字符集和具体操作列的字符集一致,则直接进行相关操作,否则得先转换为具体操作的列的字符集之后再进行操作
InnoDB记录结构
- innoDB页概念,以页为单位在磁盘和内存中进行交互,一页大小为16kb
- innoDB行格式,存放数据到磁盘的方式,有四种,compact、Redundant、Dynamic、Compressed,其中innoDB默认的为Dynamic。指定行格式的语法为create table test()row_format=compact;
- COMPACT行格式,变长长字段长度列表,NULL值列表,记录头信息,记录真实数据。其中边长字段长度列表记录变长字段(VARCHAR(M)、VARBINARY(M), TEXT真实数据占用的字节长度按照列的顺序,逆序存放。并且只存放非NULL的列内容占用的长度。
- NULL值列表,统计允许为NULL值的列中,为null值则存1,不为null则存1,逆序存储在二进制位里,最少一个字节,不足补0,不够则加一个字节。
- 记录头信息,固定的5个字节组成,存储其他信息
- 记录真实数据,三个隐藏列(row_id(主键id,6字节,自己设置了,则这个没有), transaction_id(事务ID, 6字节), roll_pointer(回滚指针, 7字节))
- CHAR(M)列的存储格式,存储一个空字符串也会占用字符集对应的最少字节数,这样设计不容易产生碎片但比较占空间。
- Redundant行格式。字段长度偏移列表(所有列都会存长度信息,按照字段的偏移量来存长度)。对NULL值处理时,将列对应的偏移量值的第一个比特位作为是否为NULL的依据,如果为1则是NULL,否则不是。
- 行溢出数据。数据量超过16kb则会出现行溢出,本页存储768个字节,剩下数据分散存储到其他页,本页20个字节记录其他页地址。
- 一个行中的所有列(不包括隐藏列和记录头信息)占用的字节长度加起来不能超过65535个字节。
- Dynamic行格式,跟上面所说的compact行格式的区别是,Dynamic行格式会把所有的真实数据存储到其他的页面中。