根本原因是客户端、服务端、连接层三者字符集不一致SET NAMES utf8mb4仅临时修改当前会话连接层设置需统一配置my.cnf/my.ini中[client]、[mysql]、[mysqld]段的字符集并在建库建表时显式指定utf8mb4同时确保客户端驱动支持并正确初始化。MySQL 客户端连接时显示乱码SET NAMES utf8mb4 临时有效但重启就失效根本原因是客户端、服务端、连接层三者字符集不一致而 SET NAMES utf8mb4 只改当前会话的连接层设置不影响后续新连接。真正要管住所有连接得从配置源头下手。修改 my.cnfLinux或 my.iniWindows在 [client]、[mysql]、[mysqld] 三个段落下分别加 default-character-set utf8mb4旧版本或 character-set-client-handshake FALSE collation-server utf8mb4_unicode_ci推荐[mysqld] 段必须设 character-set-server utf8mb4否则新建库默认还是 latin1注意MySQL 8.0 已弃用 default-character-set只认 character-set-server 和 collation-server如果配置了已废弃项启动时会报 warning 但不会失败容易误以为生效了建库/建表时没指定字符集导致插入中文报错 Incorrect string value这是典型的 utf8mb4 未穿透到表结构层——即使服务端全局设对了建库建表不显式声明依然可能沿用老默认值。创建数据库时务必写全CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;已有库可修改ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;建表时别省略CREATE TABLE t (c VARCHAR(10)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci;特别注意MySQL 的 utf8 实际是阉割版最多 3 字节不支持 emoji 和部分生僻汉字必须用 utf8mb4且客户端驱动也要支持如 JDBC 需加 ?characterEncodingutf8mb4PHP/Python 连接 MySQL 后仍乱码mysqli_set_charset() 或 conn.set_character_set(utf8mb4) 不起作用代码层设置晚于连接建立如果连接握手时服务端按旧配置发了 latin1再调函数也救不回来。 Ideogram Ideogram是一个全新的文本转图像AI绘画生成平台擅长于生成带有文本的图像如LOGO上的字母、数字等。