结论:统一使用UTF-8编码设置数据库、表、字段和连接字符集,避免乱码;创建数据库时指定 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;连接时执行 SET NAMES utf8mb4;存储二进制数据用 LONGBLOB 类型;定期 OPTIMIZE TABLE 提升查询效率,确保数据准确无损。
来源1
在MySQL中解决乱码问题的最有效方法是统一字符集。从建库开始就指定utf8mb4:CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 建表时同样指定:CREATE TABLE users (id INT, name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci); 连接数据库后立即执行SET NAMES utf8mb4; 这样导入的数据就不会乱码了。
来源2
很多乱码是因为客户端和服务器编码不一致。修改my.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'。重启MySQL服务后,所有连接都用utf8mb4,避免存储和读取乱码。
来源3
存储中文时,VARCHAR长度要考虑字符字节数,utf8mb4一个中文占4字节,所以VARCHAR(100)实际存25个中文。插入数据用PREPARE语句防SQL注入,同时确保编码一致:PREPARE stmt FROM 'INSERT INTO users(name) VALUES(?)'; EXECUTE stmt USING @name; 这能提升操作效率和数据准确性。
来源4
处理大文本存储难题,用TEXT或MEDIUMTEXT类型,指定utf8mb4。乱码常见于phpMyAdmin导入CSV,设置导入时字符集为UTF-8。查询时用CONVERT函数临时转换:SELECT CONVERT(name USING utf8mb4) FROM users; 但最好从源头统一编码。
来源5
提升效率技巧:用索引优化查询,ALTER TABLE users ADD INDEX idx_name(name); 存储JSON数据用JSON类型(MySQL5.7+),自动验证格式,避免存储错误。备份时mysqldump --default-character-set=utf8mb4,确保恢复无乱码。
来源6
Navicat等工具连接MySQL时,在连接设置中选UTF8字符集。插入emoji表情必须utf8mb4,否则存成??。测试命令:INSERT INTO test(emoji) VALUES('😀'); SELECT * FROM test; 如果显示正常,编码就对了。
来源7
FAQ:
Q: 为什么我的MySQL显示中文乱码?
A: 检查数据库、表、连接字符集是否统一为utf8mb4,用SHOW CREATE TABLE查看。
Q: 如何存储图片到MySQL?
A: 用LONGBLOB类型,读取时BASE64编码显示,但不推荐,大文件用文件系统。
Q: 导入SQL文件乱码怎么解决?
A: 用source命令前执行SET NAMES utf8mb4,或在mysqldump导出时指定--default-character-set=utf8mb4。
Q: UTF8和UTF8MB4区别?
A: UTF8只支持3字节字符,UTF8MB4支持4字节如emoji,用MB4更全面。