第二章 | MySql调控按钮-启动选项和系统变量
字符集
sql
show [character set | charset];启动选项是什么
启动选项就是 MySQL 服务启动时读取的配置,用来决定端口、数据目录、字符集、缓存大小、日志开关等行为。它们可以来自命令行,也可以来自配置文件。
常见配置文件位置:
| 系统 | 常见位置 |
|---|---|
| Linux | /etc/my.cnf、/etc/mysql/my.cnf |
| Windows | MySQL 安装目录下的 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 修改,没有写入配置文件 |
学习建议
- 区分“启动配置”和“运行时变量”。
- 区分“全局变量”和“会话变量”。
- 修改字符集时要同时看数据库、表、字段和连接字符集。
- 线上修改全局变量前要确认影响范围,并记录变更。
