温馨提示×

Debian MySQL怎么设置编码

小樊
34
2026-07-15 20:13:55
栏目: 云计算

在 Debian 上设置 MySQL 编码(以 UTF‑8 / utf8mb4 为例,推荐用于中文和 emoji),通常分两部分:服务端编码客户端/连接编码。下面按常见场景一步步来。


一、推荐编码:utf8mb4(不要再用 utf8)

  • utf8mb4 是真正的 UTF‑8(支持 4 字节,如 emoji)
  • MySQL 的 utf8 其实是阉割版,不建议再使用

二、查看当前编码(先确认现状)

mysql -u root -p
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

常见默认可能是:

  • latin1
  • utf8

三、修改 MySQL 服务端编码(关键)

1️⃣ 编辑 MySQL 配置文件

Debian 常见配置文件路径之一:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

/etc/mysql/my.cnf 也可,但一般会 include 上面路径)

2️⃣ 添加或修改以下内容

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

⚠️ 注意:

  • [mysqld] 是服务端
  • [client][mysql] 是客户端

3️⃣ 重启 MySQL

sudo systemctl restart mysql

或(老版本):

sudo service mysql restart

四、验证是否生效

SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';

应为:

character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci

五、已有数据库 / 表修改编码(重要)

1️⃣ 修改数据库

ALTER DATABASE 数据库名
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

2️⃣ 修改表

ALTER TABLE 表名
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

3️⃣ 修改字段(必要时)

ALTER TABLE 表名
MODIFY 列名 VARCHAR(255)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

六、连接时指定编码(防止乱码)

命令行连接

mysql -u root -p --default-character-set=utf8mb4

程序中(示例)

PHP (PDO):

$pdo = new PDO(
  "mysql:host=localhost;dbname=test;charset=utf8mb4",
  "user",
  "pass"
);

Python (pymysql):

conn = pymysql.connect(
    charset="utf8mb4"
)

七、常见问题

❓ 为什么不用 utf8?

  • MySQL 的 utf8 最多 3 字节
  • 无法存 emoji、部分生僻字

❓ Debian 10 / 11 / 12 有区别吗?

  • 没有本质区别
  • 配置文件路径可能略有不同,但都在 /etc/mysql/

八、快速检查清单 ✅

  • [ ] mysqld.cnf 中设置 utf8mb4
  • [ ] 重启 MySQL
  • [ ] 数据库 / 表编码已修改
  • [ ] 客户端连接指定 utf8mb4

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

  • Debian 版本
  • MySQL 版本
  • 新库 还是 已有库乱码

我可以给你更精确的配置方案。

0