温馨提示×

如何修复Debian MySQL乱码

小樊
40
2026-09-23 03:22:12
栏目: 云计算

在 Debian 上修复 MySQL 乱码(中文乱码),通常要从 字符集配置、数据库/表字符集、客户端连接字符集 三方面入手。下面按「最常见 → 进阶」顺序说明。


一、确认当前乱码原因(先排查)

登录 MySQL 后执行:

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

重点关注:

  • character_set_server
  • character_set_database
  • character_set_client
  • character_set_connection

如果看到 latin1,基本就是乱码根源。


二、修改 MySQL 全局字符集(推荐 utf8mb4)

1️⃣ 编辑配置文件(Debian 常见路径)

sudo nano /etc/mysql/my.cnf

或(MariaDB / 新版本 MySQL):

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

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

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

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

保存后重启 MySQL:

sudo systemctl restart mysql

三、已有数据库 / 表乱码修复

1️⃣ 修改数据库字符集

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

2️⃣ 修改表字符集(重要)

ALTER TABLE 表名
CONVERT TO 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

import pymysql
pymysql.connect(
  host='localhost',
  user='root',
  password='',
  database='test',
  charset='utf8mb4'
)

五、终端 / SSH 乱码(非 MySQL 问题)

如果是 终端显示乱码:

locale

若不是 UTF-8:

sudo apt install locales
sudo dpkg-reconfigure locales

选 en_US.UTF-8 或 zh_CN.UTF-8


六、总结(最简方案)

✅ 服务端:utf8mb4
✅ 数据库 / 表:utf8mb4
✅ 连接:指定 utf8mb4
✅ 终端:UTF-8


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

  • MySQL 版本(mysql -V)
  • 是 写入乱码 还是 读取乱码
  • 使用语言(PHP / Python / Java)

我可以给你精确修复命令。

0 踩