MySQL中文乱码解决办法
中文乱码基本都是字符集没对上,连接、数据库、表、字段这四层里,只要有一层还是latin1就会出问题。
先查现状,别急着动手:
SHOW VARIABLES LIKE 'character%'; -- 看服务端和连接到底用的啥字符集
SHOW CREATE TABLE users; -- 看表本身默认字符集
建库建表直接写死utf8mb4,别用utf8,那是阉割版,存不了emoji。
CREATE DATABASE demo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 已有老表连字段一起转过来
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 连上库先执行这句,让客户端和服务端说同一种话
SET NAMES utf8mb4;
PHP连接时在DSN里带上charset最省事:
// 不加charset,中文存进去就是一堆问号
$pdo = new PDO('mysql:host=127.0.0.1;dbname=demo;charset=utf8mb4', 'root', '123456');
小皮面板里打开my.ini,把character-set-server改成utf8mb4,保存后重启MySQL。网页那头的header和表单也统一按utf-8来,缺一头照样乱。
说点什么 0