MySQL 8.0 还是 5.7?看你的应用是否依赖 mysql_native_password
绝大多数新项目直接选
MySQL 8.0,但如果你用的是老版本 PHP(
php 7.2及更早)、旧版 Navicat、或某些 Python 的
mysql-connector-python(
8.0.11之前),连接会失败,报错:
Authentication plugin 'caching_sha2_password' cannot be loaded。这不是配置问题,是认证插件不兼容。
解决办法有两个:
安装时勾选「Use Legacy Authentication Method」(推荐给开发测试环境) 装完后手动执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';或者升级客户端驱动(如把
mysql-connector-python升到
8.0.12+)
社区版(Community)够用吗?别被「企业版」名字吓住
MySQL Community Server是官方免费、开源、更新最及时的版本,包含全部核心功能:InnoDB、JSON、窗口函数、CTE、角色管理、并行查询优化等。所谓「企业版」只是多了备份加密、审计日志、线程池监控等运维增强模块,普通业务完全不需要。
注意两个常见误判点:
MySQL Installer页面里标「Web Community」不是单独版本,只是带了
MySQL Workbench和
Connector/ODBC的安装包组合 下载页看到的
MySQL Server+
MySQL Shell+
MySQL Router是同一套生态组件,不是多个版本 Windows 下避免选
MSI全自动安装包——它默认把服务名设为
MySQL80,改名麻烦;建议选
ZIP Archive手动解压部署
配置文件 my.cnf
放哪?Windows 和 Linux 路径完全不同
MySQL 启动时按固定顺序查找配置文件,找不到就用内置默认值。路径不对,改了配置也无效。
关键路径:
Linux:优先读/etc/my.cnf,然后是
/etc/mysql/my.cnf,再是
$MYSQL_HOME/my.cnf,最后是
~/.my.cnfmacOS(Homebrew 安装):通常是
/opt/homebrew/etc/my.cnf或
/usr/local/etc/my.cnfWindows:注册表中
HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB\MySQL Server 8.0\Location指定路径,或默认找
C:\my.ini(不是
my.cnf!)
验证是否生效:启动后执行
SELECT @@global.config_file;(8.0.21+ 支持),或运行
mysqld --verbose --help | grep "Default options"看加载顺序。
字符集别只改 utf8mb4
,还要同步设好排序规则
只在
my.cnf里加
character-set-server = utf8mb4不够,
collation-server必须匹配,否则建库建表时仍可能用
utf8mb4_0900_ai_ci(8.0 默认)或
utf8mb4_general_ci(5.7 默认),导致大小写敏感行为不一致、索引失效等问题。
稳妥写法:
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
注意:
utf8mb4_unicode_ci比
utf8mb4_0900_ai_ci兼容性更好,尤其涉及多语言排序时 已存在的库/表不会自动变更,需手工执行:
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;连接层也要统一,比如 JDBC URL 加上
?characterEncoding=utf8mb4&useUnicode=true配置真正起效的关键,往往卡在路径没对上、插件不兼容、或字符集和排序规则没配对——这些地方不报错,但行为异常,查起来特别费时间。
