如何设置MySQL 8.0的默认字符集为GBK_修改配置文件中的编码参数

大晨小哥_5081

大晨小哥_5081

2026-05-26

767人浏览

原创

mysql 8.0官方默认字符集为utf8mb4,不推荐使用gbk;若强依赖gbk,须在my.ini的[mysqld]段添加character-set-server=gbk和collation-server=gbk_chinese_ci,重启服务后验证character_set_server与新建库的create database语句中是否含default character set gbk。

如何设置mysql 8.0的默认字符集为gbk_修改配置文件中的编码参数

MySQL 8.0 默认字符集已是 utf8mb4,官方不推荐、也不保证 gbk 在全部场景下可用;若业务强依赖 GBK(如对接老旧 Windows 客户端或 legacy 系统),必须手动配置,但要注意:服务端设为 gbk 后,所有新库/新表/新列默认继承该编码,且无法存储 emoji、生僻汉字、Unicode 4 字节字符。

修改 my.ini 中的 server 级别字符集参数

Windows 下 MySQL 8.0 的主配置文件是 my.ini,位置通常在 C:\ProgramData\MySQL\MySQL Server 8.0\(注意 ProgramData 是隐藏文件夹)。直接编辑该文件,在 [mysqld] 段落下添加:

[mysqld]
character-set-server=gbk
collation-server=gbk_chinese_ci

⚠️ 不要写 default-character-set=gbk —— 这个参数在 MySQL 8.0 中已被弃用,仅对 [client] 和 [mysql] 有效,且不能影响服务端行为。

关键点:

  • character-set-server 才控制新建数据库的默认字符集,必须设为 gbk
  • collation-server 必须匹配,gbk_chinese_ci 是 GBK 唯一受支持的校对规则
  • 不要同时设置 init_connect='SET NAMES gbk':它对 SUPER 用户无效,且可能和客户端实际编码冲突

为什么 show variables like '%character%' 里仍有 utf8mb4?

即使改了 my.ini 并重启了服务,执行 show variables like '%character%' 仍可能看到部分变量(如 character_set_client、character_set_results)显示 utf8mb4。这不是配置失败,而是因为:

  • 这些变量反映的是当前连接的会话级设置,不是全局配置值
  • MySQL 客户端(如命令行 mysql.exe)启动时会按自身环境自动协商字符集;Windows CMD 默认是 GBK,但 mysql.exe 可能仍尝试用 UTF-8 握手
  • 真正生效的是 character_set_server 和 character_set_database,它们决定新建对象的默认编码

验证是否生效:创建新数据库后执行 show create database testdb;,确认输出中包含 DEFAULT CHARACTER SET gbk。

Pandas 配置文件报告生成器
Pandas 配置文件报告生成器

使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。

下载

客户端连接时的字符集协商陷阱

Windows 下用 CMD 连 MySQL,即使服务端设了 gbk,仍可能乱码,原因在于三层编码错位:

  • CMD 控制台本身用 GBK 渲染文字
  • 你输入的 SQL(比如含中文)被 CMD 按 GBK 编码成字节发给 MySQL
  • 但 MySQL 若把该连接的 character_set_client 误判为 utf8mb4,就会用 UTF-8 解码那串 GBK 字节 → 得到乱码

解决办法(二选一):

• 启动 CMD 后先运行:chcp 936(显式切回 GBK 编码),再执行 mysql -u root -p

• 或在连接时强制指定:mysql --default-character-set=gbk -u root -p(这会覆盖客户端握手时的自动协商)

⚠️ 注意:SET NAMES gbk 必须在每次连接后手动执行,且只对当前会话有效;它不能替代配置文件里的 character-set-server。

真正难处理的不是改配置,而是已有数据迁移:如果旧库是 utf8mb4,直接改 server 字符集不会转换存量表的定义,必须逐个执行 ALTER DATABASE db_name CHARACTER SET gbk COLLATE gbk_chinese_ci 和 ALTER TABLE t CONVERT TO CHARACTER SET gbk COLLATE gbk_chinese_ci,而这类转换在含 4 字节字符时会失败或截断 —— 这才是生产环境最常卡住的地方。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4303

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

911

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1109

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6221

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3063

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6200

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8381

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1150

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

992

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 187人学习