温馨提示×

linux mysql怎么设置编码

小樊
48
2026-10-27 06:15:19
栏目: 云计算

在 Linux 下设置 MySQL 编码(通常指 UTF-8 / utf8mb4),可以从配置文件、数据库、表、连接几个层面来做。下面以常见发行版(CentOS / Ubuntu)和 MySQL 5.7 / 8.0 为例说明。


一、修改 MySQL 配置文件(推荐,永久生效)

1. 找到配置文件

# CentOS / RHEL
/etc/my.cnf
/etc/my.cnf.d/*.cnf

# Ubuntu / Debian
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf

2. 修改配置(utf8mb4 推荐)

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

✅ 建议使用 utf8mb4(支持 emoji),而不是旧版 utf8

3. 重启 MySQL

# CentOS
systemctl restart mysqld

# Ubuntu
systemctl restart mysql

二、查看当前编码

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

常见应看到:

character_set_client     utf8mb4
character_set_connection utf8mb4
character_set_database   utf8mb4
character_set_server     utf8mb4

三、创建数据库时指定编码

CREATE DATABASE testdb
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

四、修改已有数据库 / 表编码

修改数据库

ALTER DATABASE testdb
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

修改表

ALTER TABLE tablename
  CONVERT TO CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

五、连接时指定编码(程序层)

命令行

mysql -uroot -p --default-character-set=utf8mb4

程序中示例

  • JDBC
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8mb4
  • PHP (PDO)
new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass);

六、常见问题

1. 已插入乱码能否恢复?

❌ 一般不能,需在写入前就设置正确编码。

2. MySQL 8 默认已是 utf8mb4

无需修改,只需确认配置未被覆盖。

3. 字段长度变化

utf8mb4 下:

  • VARCHAR(255) 可能超出索引长度
  • 可改 VARCHAR(191) 或使用 innodb_large_prefix=ON

如果你愿意,可以告诉我:

  • MySQL 版本
  • Linux 发行版
  • 是否已有数据(要不要迁移)

我可以给你精准配置方案。

0 踩