温馨提示×

怎样修debian mysql乱码

小樊
48
2026-09-01 21:31:42
栏目: 云计算

在 Debian 上修复 MySQL 乱码,核心思路是:统一字符集(推荐 utf8mb4),从「系统 → MySQL 配置 → 数据库/表 → 客户端」全部一致。

下面按步骤来,基本能解决 99% 的乱码问题。


一、确认当前乱码情况

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

常见问题:

  • latin1
  • utf8(不是真正的 UTF-8,最多 3 字节)

二、修改 MySQL 配置文件(最关键)

1. 找到配置文件

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'

3. 重启 MySQL

systemctl restart mysql
# 或
service mysql restart

三、检查数据库和表字符集

1. 查看数据库

SHOW CREATE DATABASE 数据库名;

如果不是 utf8mb4:

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

2. 查看表

SHOW CREATE TABLE 表名;

修改表:

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

四、连接时指定字符集(很重要)

命令行

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

程序连接示例

PHP

$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'
)

五、系统层面(可选但推荐)

确保系统语言是 UTF-8:

locale

如果不是:

dpkg-reconfigure locales
# 选 en_US.UTF-8 或 zh_CN.UTF-8

六、已经乱码的数据还能救吗?

如果之前是 latin1 存储中文:

  • 基本不可逆
  • 建议:
    1. 导出为文本
    2. 转码
    3. 重新导入 utf8mb4 库

七、快速自检清单 ✅

  • [ ] MySQL 服务端 utf8mb4
  • [ ] 数据库 utf8mb4
  • [ ] 表 utf8mb4
  • [ ] 连接指定 utf8mb4
  • [ ] 系统 locale UTF-8

如果你愿意,可以把下面信息发我,我可以给你精准修改方案

  1. Debian 版本
  2. MySQL 版本
  3. SHOW VARIABLES LIKE 'character_set%'; 输出
  4. 乱码是「存进去乱」还是「查出来乱」

我可以一步步帮你修。

0