网站存中文变成乱码、显示成问号,十有八九是字符集没配对。数据库、表、连接、页面四层,有一层不是utf8mb4就乱。小编实测把这几层统一成utf8mb4,中文再也没乱过。这篇讲MySQL字符集和乱码怎么解决。
数据库要存中文,主机性能也得上心,这两家海外主机稳定好用:AbeloHost(海外服务器)、ServerField(云主机)。

先懂为什么乱码
字符集决定中文怎么编码存储。utf8mb4是最通用的,能存中文、emoji,兼容性最好。如果库是latin1、表是gbk、连接是utf8,各层不一致,就存不进、读不出。统一成utf8mb4,乱码基本消失。这是根治乱码的关键。

库表字符集怎么设
建库时指定:CREATE DATABASE xxx DEFAULT CHARACTER SET utf8mb4。建表也一样指定utf8mb4。已存在的库表,用ALTER DATABASE/TABLE改。字段类型字符集也检查。新项目从建库就统一utf8mb4,省得后面返工。

连接和页面也要一致
程序连接数据库要指定utf8mb4(连接字符串或SET NAMES utf8mb4)。页面也要设对。PHP、Java等程序里连接编码统一。四层全一致,数据才不乱。只改一层没用,要全链路统一。

已乱码的数据怎么救
已经存成乱码的,先备份再处理。如果只是显示乱、底层没坏,改连接和页面字符集就能正常显示。如果底层编码存错,可能要转码(如gbk转utf8mb4),风险高,务必先备份。新写入的保证utf8mb4,旧数据逐步处理。

避坑提醒
utf8和utf8mb4不一样,utf8存不了部分emoji,直接用utf8mb4。别只改页面显示,存储编码不改还是会乱。ALTER大表会锁表,低峰期操作。改前备份、改后验证。字符集统一,中文就稳了。

总结:库表连接页面全设utf8mb4、建库建表就从源头统一、已乱数据先备份再处理、避免锁表和误改,MySQL中文乱码就能根治。中文存得对,网站内容才站得住。



下载 
下载 
下载
下载 
下载
喜欢
顶
难过
囧
围观
无聊



