Skip to content

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 即可。差异点:

  1. 无服务配置向导(5.7 安装包不自带):如果 MSI 不带服务配置,需要手动注册服务
  2. 无临时密码输出:5.7.6 之前版本安装时不生成临时密码,空密码直接可登录

macOS 安装

bash
# Homebrew 方式
brew install mysql@5.7

# 启动
brew services start mysql@5.7

# 连接
mysql -u root

Linux 安装(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 最大的历史遗留问题就是字符集

什么是字符集

字符集定义了「文字怎么存储」。同一个汉字,在不同字符集里占用的字节数完全不同:

字符集汉字「中」占用字节最大长度表情支持
latin11 字节(实际存不下,报错)单字节
gbk2 字节双字节
utf8(MySQL 老版)3 字节三字节
utf8mb43~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;

已有乱码数据怎么救

如果数据库里已经有乱码了,很遗憾,已经存入的乱码无法恢复。你能做的是:

  1. 确认当前连接字符集是否正确(防止新数据继续乱码)
  2. 导出数据(如果是乱码导出会连乱码一起导出)
  3. 重新初始化数据库,设置正确字符集
  4. 重新导入数据

5.7 与 8.0 核心差异速查

对比项MySQL 5.7MySQL 8.0
默认字符集latin1utf8mb4
窗口函数❌ 不支持✅ 支持
CTE(公用表表达式)❌ 不支持✅ 支持
JSON 支持基础支持增强,支持 JSON_TABLE
隐藏索引❌ 不支持✅ 支持
降序索引❌ 不支持✅ 支持
认证插件mysql_native_passwordcaching_sha2_password
数据字典MyISAM 字典InnoDB 字典(事务性)

下一步

字符集搞定了,接下来了解 MySQL 5.7 安装常见问题(服务启动 / 用户登录),或者直接看 MySQL 目录结构 了解安装后各个文件在哪。

基于 VitePress 构建