MySQL 5.7 安装与字符集设置
为什么还要学 5.7
MySQL 8.0 已经发布多年,但 5.7 仍然广泛存在于大量生产环境中——尤其是在一些「能跑就不动」的老系统里。面试时也经常问到 5.7 和 8.0 的差异。
这一章专门讲 5.7 的安装,以及一个 5.7 里必须手动处理、8.0 里已经自动搞定的问题:字符集设置。
MySQL 5.7 安装
Windows 安装
下载地址:https://downloads.mysql.com/archives/community/
选择:
- Product Version:5.7.44
- Operating System:Microsoft Windows
- OS Version:Windows (x86, 64-bit), MSI Installer
安装步骤与 8.0 基本一致,图形化向导一路 Next 即可。差异点:
- 无服务配置向导(5.7 安装包不自带):如果 MSI 不带服务配置,需要手动注册服务
- 无临时密码输出:5.7.6 之前版本安装时不生成临时密码,空密码直接可登录
macOS 安装
bash
# Homebrew 方式
brew install mysql@5.7
# 启动
brew services start mysql@5.7
# 连接
mysql -u rootLinux 安装(CentOS 7)
bash
# 添加仓库
sudo yum install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装
sudo yum install mysql-community-server
# 启动
sudo systemctl start mysqld
# 查看临时密码
sudo grep 'temporary password' /var/log/mysqld.log字符集:MySQL 5.7 最大的坑
MySQL 5.7 最大的历史遗留问题就是字符集。
什么是字符集
字符集定义了「文字怎么存储」。同一个汉字,在不同字符集里占用的字节数完全不同:
| 字符集 | 汉字「中」占用字节 | 最大长度 | 表情支持 |
|---|---|---|---|
latin1 | 1 字节(实际存不下,报错) | 单字节 | ❌ |
gbk | 2 字节 | 双字节 | ❌ |
utf8(MySQL 老版) | 3 字节 | 三字节 | ❌ |
utf8mb4 | 3~4 字节 | 四字节 | ✅ |
MySQL 里的 utf8 是一个历史遗留陷阱——它不是标准的 UTF-8(4 字节),而是阉割版(最多 3 字节)。一个 emoji 就存不下。
MySQL 8.0 默认 utf8mb4,这个坑已经填了。MySQL 5.7 默认 latin1,你需要手动处理。
5.7 默认字符集问题
查看当前字符集:
sql
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';5.7 默认大概是这个样子:
character_set_client | latin1
character_set_connection | latin1
character_set_database | latin1
character_set_results | latin1
character_set_server | latin1
character_set_system | utf8这意味着:你在客户端用中文插入数据,数据库里可能是乱码。
正确配置字符集
安装完成后,第一件事修改配置文件:
ini
[mysqld]
# 核心配置:设置默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 跳过字符集老问题
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4修改后重启 MySQL,再查:
character_set_client | utf8mb4
character_set_connection | utf8mb4
character_set_database | utf8mb4
character_set_results | utf8mb4
character_set_server | utf8mb4
character_set_system | utf8字符集设置流程图
安装 MySQL 5.7
↓
修改 my.cnf/my.ini
↓
重启 MySQL
↓
创建数据库时指定字符集
↓
CREATE DATABASE db_name DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
↓
建表时指定字符集
↓
CREATE TABLE t (...) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;已有乱码数据怎么救
如果数据库里已经有乱码了,很遗憾,已经存入的乱码无法恢复。你能做的是:
- 确认当前连接字符集是否正确(防止新数据继续乱码)
- 导出数据(如果是乱码导出会连乱码一起导出)
- 重新初始化数据库,设置正确字符集
- 重新导入数据
5.7 与 8.0 核心差异速查
| 对比项 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|
| 默认字符集 | latin1 | utf8mb4 |
| 窗口函数 | ❌ 不支持 | ✅ 支持 |
| CTE(公用表表达式) | ❌ 不支持 | ✅ 支持 |
| JSON 支持 | 基础支持 | 增强,支持 JSON_TABLE |
| 隐藏索引 | ❌ 不支持 | ✅ 支持 |
| 降序索引 | ❌ 不支持 | ✅ 支持 |
| 认证插件 | mysql_native_password | caching_sha2_password |
| 数据字典 | MyISAM 字典 | InnoDB 字典(事务性) |
下一步
字符集搞定了,接下来了解 MySQL 5.7 安装常见问题(服务启动 / 用户登录),或者直接看 MySQL 目录结构 了解安装后各个文件在哪。
