在 Debian 上修复 MySQL 乱码,核心思路是:统一字符集(推荐 utf8mb4),从「系统 → MySQL 配置 → 数据库/表 → 客户端」全部一致。
下面按步骤来,基本能解决 99% 的乱码问题。
mysql -u root -p
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
常见问题:
latin1utf8(不是真正的 UTF-8,最多 3 字节)Debian 通常是:
/etc/mysql/my.cnf
# 或
/etc/mysql/mysql.conf.d/mysqld.cnf
[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'
systemctl restart mysql
# 或
service mysql restart
SHOW CREATE DATABASE 数据库名;
如果不是 utf8mb4:
ALTER DATABASE 数据库名
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
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 存储中文:
如果你愿意,可以把下面信息发我,我可以给你精准修改方案:
SHOW VARIABLES LIKE 'character_set%'; 输出我可以一步步帮你修。