mysql安装时设置字符集与时区的配置方法

来源:这里教程网 时间:2026-02-28 20:44:13 作者:

MySQL 8.0 安装时通过 my.cnf 一次性设好字符集

安装阶段就配对字符集,能避免后续改

character_set_server
collation_server
引发的表/列乱码、连接层不一致等问题。关键不是只设
utf8
——MySQL 里它不支持 emoji 和部分汉字,必须用
utf8mb4

character_set_server = utf8mb4
:控制新建数据库默认字符集
collation_server = utf8mb4_0900_ai_ci
:MySQL 8.0 默认校对规则,区分大小写和重音更合理
别漏掉客户端层:
init_connect = 'SET NAMES utf8mb4'
(仅对普通用户生效,root 不触发)
如果用 Docker,
my.cnf
需挂载到容器内
/etc/mysql/my.cnf
/etc/my.cnf
,且权限为 644

Linux 下 mysqld 启动前强制指定时区(非系统时区)

MySQL 默认读系统时区(

/etc/localtime
),但生产环境常需统一为
Asia/Shanghai
,尤其跨机房部署时。不能只靠
SET time_zone = '+8:00'
临时设置——它不作用于日志、事件调度器、函数如
NOW()
的初始化值。

[mysqld]
段加:
default-time-zone = '+08:00'
(推荐,简单稳定)
或用命名时区:
default-time-zone = 'Asia/Shanghai'
,但要求 MySQL 已加载时区表(需运行
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
验证是否生效:
SELECT @@global.time_zone, @@session.time_zone;
注意:修改后必须重启
mysqld
FLUSH PRIVILEGES
无效

Windows 安装包(MSI)中跳过向导、静默配置字符集与时区

图形化安装向导不暴露

my.ini
编辑入口,但可通过命令行静默安装+预置配置文件实现全自动。

先准备
my.ini
,放在例如
C:\mysql\my.ini
,含完整
[mysqld]
段(含
character_set_server
default-time-zone
执行安装命令:
msiexec /i mysql-installer-community-8.0.xx.msi /quiet CONFIGTYPE=configTypeServer INI_FILE="C:\mysql\my.ini"
CONFIGTYPE=configTypeServer
是关键开关,否则 installer 会忽略
INI_FILE
安装后检查:
mysqld --verbose --help | grep "default-time-zone\|character-set-server"

docker run 启动时覆盖默认字符集与时区(无需自定义 my.cnf)

用官方镜像时,不必打包自己的配置文件——MySQL 8.0+ 支持通过环境变量直接注入核心参数。

启动命令示例:
docker run -d \
  --name mysql8 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -e MYSQL_COLLATION_SERVER=utf8mb4_0900_ai_ci \
  -e MYSQL_CHARACTER_SET_SERVER=utf8mb4 \
  -e TZ=Asia/Shanghai \
  -p 3306:3306 \
  mysql:8.0
其中
TZ
环境变量影响容器系统时区,进而被
mysqld
读取为默认时区(前提是没显式设
default-time-zone
若同时设
default-time-zone
TZ
,前者优先级更高
注意:
MYSQL_* 
环境变量只对首次初始化生效;容器重建时若挂载了已有数据卷,这些变量会被忽略

实际部署时最容易被忽略的是 init_connect 对 root 用户无效,以及 Docker 中挂载数据卷后环境变量失效这两点。一旦跳过验证步骤,上线后才暴露乱码或时间差,排查成本远高于安装时多敲两行配置。

相关推荐