Skip to content

第二章 | MySql调控按钮-启动选项和系统变量

字符集

sql
show [character set | charset];

启动选项是什么

启动选项就是 MySQL 服务启动时读取的配置,用来决定端口、数据目录、字符集、缓存大小、日志开关等行为。它们可以来自命令行,也可以来自配置文件。

常见配置文件位置:

系统常见位置
Linux/etc/my.cnf/etc/mysql/my.cnf
WindowsMySQL 安装目录下的 my.ini
Docker挂载到容器内的配置文件

启动配置读取流程

mermaid
flowchart TD
    A[启动 mysqld] --> B[读取默认配置文件]
    B --> C[读取指定配置文件]
    C --> D[解析命令行参数]
    D --> E[命令行参数覆盖配置文件]
    E --> F[初始化系统变量]
    F --> G[MySQL 服务启动完成]

系统变量是什么

系统变量是 MySQL 运行时控制行为的变量,例如字符集、隔离级别、连接数、缓存大小等。它分为全局变量和会话变量。

类型作用范围示例
全局变量影响新连接或整个实例max_connections
会话变量只影响当前连接transaction_isolation

查看变量:

sql
show variables like 'character_set%';
show variables like 'transaction_isolation';

修改变量:

sql
set global max_connections = 500;
set session transaction_isolation = 'READ-COMMITTED';

字符集和比较规则

字符集决定字符如何编码,比较规则决定字符如何排序和比较。比如是否区分大小写、中文排序方式等,都和比较规则有关。

常见排查命令:

sql
show charset;
show collation;
show variables like 'collation%';

常见问题

问题原因
中文乱码客户端、连接、表字段字符集不一致
排序结果奇怪使用了不合适的 collation
修改全局变量不生效已存在连接仍使用原会话变量
重启后配置丢失只用 set global 修改,没有写入配置文件

学习建议

  1. 区分“启动配置”和“运行时变量”。
  2. 区分“全局变量”和“会话变量”。
  3. 修改字符集时要同时看数据库、表、字段和连接字符集。
  4. 线上修改全局变量前要确认影响范围,并记录变更。