mysql 5.7在windows上启动失败的主因是误在[mysqld]段使用已废弃的default-character-set=utf8,正确写法仅保留character-set-server=utf8;配置文件my.ini须存为ansi编码且位于c:\programdata\mysql\mysql server 5.7\目录下。

MySQL 5.7 在 Windows 上不能只改 default-character-set=utf8,否则服务根本启动不了——这是最常踩的坑。
为什么改了 my.ini 还是启动失败?
因为 MySQL 5.7 已废弃 default-character-set 在 [mysqld] 段的用法。如果你在 [mysqld] 下写了 default-character-set=utf8,mysqld 会直接拒绝启动,Windows 服务日志里可能只显示“错误 1067”,不报具体原因。
正确写法只有一处:character-set-server=utf8,且必须放在 [mysqld] 段内。
-
[client]段加default-character-set=utf8:影响所有客户端连接(如命令行、Navicat)的默认字符集 -
[mysql]段加default-character-set=utf8:专用于mysql命令行工具自身(和[client]不完全等价,建议都写) -
[mysqld]段只写character-set-server=utf8,不要写default-character-set=utf8
my.ini 文件位置和编码格式必须小心
Windows 下 MySQL 5.7 的配置文件通常在 C:\ProgramData\MySQL\MySQL Server 5.7\my.ini。注意:ProgramData 是隐藏目录,需在文件夹选项中勾选“显示隐藏的项目”才能看到。
编辑保存时,文件编码必须是 ANSI(即 Windows-1252),不是 UTF-8 或 UTF-8 BOM。用记事本保存时选“另存为”,编码下拉菜单选“ANSI”;用 VS Code/Notepad++ 也要手动确认编码格式。否则服务无法读取配置,静默失败。
修改前务必备份原 my.ini,比如复制一份叫 my.ini.bak。
重启后怎么验证是否生效?
服务重启后,登录 MySQL 执行:
SHOW VARIABLES LIKE 'character%';
重点关注这三项是否都是 utf8:
character_set_clientcharacter_set_servercharacter_set_database
如果 character_set_server 是 utf8,但 character_set_client 仍是 latin1,说明 [client] 或 [mysql] 段没生效,或你用了 mysql -h localhost -u root -p —— 此时走的是 socket 连接,[client] 段可能被跳过。可改用 mysql -h 127.0.0.1 -u root -p 强制走 TCP,再查 STATUS; 看 “Current client” 行是否显示 via TCP/IP。
utf8 不等于 utf8mb4,别混淆
MySQL 的 utf8 实际是 utf8mb3,最多支持 3 字节字符,不支持 emoji 和部分生僻汉字。如果你后续要存微信昵称、颜文字或古籍用字,现在就该直接配 utf8mb4,而不是先配 utf8 再升级。
配 utf8mb4 要多加一行:collation-server=utf8mb4_unicode_ci,且 [client] 和 [mysql] 段也得同步改成 default-character-set=utf8mb4。已有数据库和表不会自动变更,必须手动 ALTER DATABASE ... CHARACTER SET = utf8mb4 和 ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4。
真正麻烦的从来不是改配置,而是改完之后发现老数据乱码、应用连不上、或者某条 SQL 因隐式转换突然变慢——这些都得逐层验证,不能只看 SHOW VARIABLES。











