在 Ubuntu 上 MySQL 出现乱码,通常不是“系统坏了”,而是字符集不一致导致的。下面按“最常见 → 少见”的原因给你说明,并给出解决办法。
默认可能是 latin1,中文就会乱码。
查看当前字符集:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
如果看到:
character_set_server = latin1
那就是问题根源。
解决方法(推荐 UTF-8MB4):
编辑 MySQL 配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 下添加:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
再编辑客户端配置:
sudo nano /etc/mysql/conf.d/mysql.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
重启 MySQL:
sudo systemctl restart mysql
即使 MySQL 是 UTF-8,表和字段也可能不是。
查看表字符集:
SHOW CREATE TABLE your_table;
如果显示 latin1,执行:
ALTER DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE your_table CONVERT TO CHARACTER SET utfmb4 COLLATE utf8mb4_unicode_ci;
比如 PHP / Python / Java / Shell 连接时没设置 UTF-8。
命令行测试:
mysql -u root -p --default-character-set=utf8mb4
常见语言设置示例:
new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", $user, $pass);
conn = pymysql.connect(charset="utf8mb4")
查看系统语言:
locale
如果不是 UTF-8:
sudo apt install locales
sudo dpkg-reconfigure locales
选择 en_US.UTF-8 或 zh_CN.UTF-8
如果是导入 SQL 乱码:
mysql -u root -p --default-character-set=utf8mb4 db < file.sql
确保 SQL 文件本身是 UTF-8:
file file.sql
如果你愿意,可以把下面信息发我,我能直接帮你定位:
SHOW VARIABLES LIKE 'character_set%';SHOW CREATE TABLE 表名;我可以直接告诉你改哪一行。