在 Debian 上设置 MySQL 编码(以 UTF‑8 / utf8mb4 为例,推荐用于中文和 emoji),通常分两部分:服务端编码 和 客户端/连接编码。下面按常见场景一步步来。
utf8mb4 是真正的 UTF‑8(支持 4 字节,如 emoji)utf8 其实是阉割版,不建议再使用mysql -u root -p
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
常见默认可能是:
latin1utf8Debian 常见配置文件路径之一:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
(/etc/mysql/my.cnf 也可,但一般会 include 上面路径)
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
⚠️ 注意:
[mysqld]是服务端[client]和[mysql]是客户端
sudo systemctl restart mysql
或(老版本):
sudo service mysql restart
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
应为:
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
ALTER DATABASE 数据库名
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE 表名
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE 表名
MODIFY 列名 VARCHAR(255)
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 (pymysql):
conn = pymysql.connect(
charset="utf8mb4"
)
utf8 最多 3 字节/etc/mysql/mysqld.cnf 中设置 utf8mb4utf8mb4如果你愿意,可以告诉我:
我可以给你更精确的配置方案。