网络宝典
第二套高阶模板 · 更大气的阅读体验

MySQL编码修改:轻松解决乱码问题

发布时间:2026-01-18 21:40:26 阅读:180 次

为什么需要修改MySQL编码

你在往数据库里存用户名的时候,发现名字变成了一堆问号或者乱码?别急,这多半是编码没设置对。MySQL默认的编码可能是latin1,它不支持中文,一碰到汉字就抓瞎。把编码改成utf8或者utf8mb4,基本就能搞定这类问题。

查看当前编码设置

先登录MySQL,执行下面这条命令,看看现在的编码情况:

SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';

你会看到一堆变量,重点关注character_set_databasecharacter_set_servercharacter_set_client这些。如果它们不是utf8或utf8mb4,那就得改了。

修改MySQL配置文件

在Windows上,配置文件通常是my.ini;Linux上一般是/etc/mysql/my.cnf/etc/my.cnf。打开文件,在[mysqld]段落下加上这些内容:

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

同时,在[client]和[mysql]部分也加上客户端的编码设置,避免连接时出问题:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

重启MySQL服务

改完配置得重启服务才能生效。Windows可以在服务管理里找MySQL,右键重启。Linux用命令:

sudo systemctl restart mysql

重启之后再登录,重新执行SHOW VARIABLES LIKE 'character_set_%',看看是不是都变成utf8mb4了。

已有数据库和表怎么办

如果之前建的库或表还是老编码,需要手动转换。比如要把一个叫user_db的数据库改成utf8mb4:

ALTER DATABASE user_db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

改某张表:

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

这样数据不会丢,还能正常显示中文。

连接程序也要注意编码

就算数据库设对了,程序连的时候没指定编码,照样可能乱码。比如PHP里连接MySQL,记得加参数:

$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass, [
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'
]);

Python用pymysql的话,连接时写明charset:

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

小细节处理好了,整个链路就通了。

编码问题看起来挺烦,其实只要从配置、数据库、程序三头入手,一步步检查,基本都能解决。下次看到中文不再变问号,你就知道改对了。