Linux 系统编码设置
Linux 系统的字符编码是影响多语言环境支持的基础,尤其在处理中文等非 ASCII 字符时,正确的编码设置至关重要,系统编码通常由 locale 配置决定,可通过 locale 命令查看当前设置,常见的中文字符集包括 UTF-8 和 GBK,UTF-8 因其支持全球多语言字符成为主流推荐,若需修改系统编码,可编辑 /etc/locale.gen 文件,取消对应编码的注释(如 zh_CN.UTF-8 UTF-8),然后运行 locale-gen 生效,或通过 export LANG=zh_CN.UTF-8 临时设置。

MySQL 数据库编码设置
MySQL 的编码涉及服务器、数据库、表和字段四个层级,需逐层配置以确保数据一致性。
服务器级编码
MySQL 服务器启动时会读取配置文件(如 /etc/my.cnf 或 ~/.my.cnf)中的 character-set-server 和 collation-server 参数,设置默认字符集为 utf8mb4(utf8mb4 是 UTF-8 的完整实现,支持 emoji 和特殊字符):
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
修改后需重启 MySQL 服务使配置生效。
数据库级编码
创建数据库时可通过 DEFAULT CHARACTER SET 指定编码,或修改现有数据库编码:

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
表和字段级编码
创建表时定义字符集,或修改已有表结构:
CREATE TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) DEFAULT CHARACTER SET utf8mb4;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
字段级编码可针对特殊需求单独设置,但建议保持与数据库级一致以避免乱码。
Linux 与 MySQL 编码的协同配置
为避免因系统与数据库编码不一致导致的乱码,需确保两者字符集兼容,Linux 系统使用 UTF-8 编码时,MySQL 的 character-set-server 也应设置为 utf8mb4,连接 MySQL 时需指定编码,可通过客户端参数或连接语句实现:
-- 连接时指定编码 mysql --default-character-set=utf8mbb -u root -p -- 或在 SQL 语句中设置 SET NAMES utf8mb4;
常见问题与排查
若出现乱码,可通过以下步骤排查:

- 检查系统编码:
locale命令输出中LANG和LC_*是否为UTF-8; - 检查 MySQL 配置:执行
SHOW VARIABLES LIKE 'character_set%';查看服务器、数据库、连接和客户端字符集; - 检查表结构:确认表和字段的字符集是否为
utf8mb4; - 数据导入导出:使用
mysqldump导出时添加--default-character-set=utf8mb4,导入前确保文件编码与数据库一致。
Linux 系统与 MySQL 数据库的编码设置是确保数据正确存储和显示的关键,通过合理配置系统 locale、MySQL 服务器参数、库表结构,并在连接时统一编码,可有效避免乱码问题,推荐全程使用 utf8mb4 编码,以兼容多语言字符和特殊符号,提升系统的国际化支持能力。













