做 Web 项目时,中文乱码有一半能追到「建库时没定好字符集」。表、连接、页面编码再怎么改,库默认还是 latin1,迟早会炸。所以我习惯:建库时就把默认字符集写死。
UTF-8 库(常用)
创建数据库 yourdbname,默认字符集 utf8,排序规则 utf8_general_ci:
CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;当年很多站点这样建。若你的 MySQL 版本支持,新项目更推荐 utf8mb4(完整 Unicode,含 emoji):
CREATE DATABASE IF NOT EXISTS yourdbname
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;GBK 库(特定遗留场景)
如果业务明确要求默认 GBK:
create database yourdb DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;一般只在对接老系统、老报表时用;能 utf8mb4 就别再开新的 GBK 库。
建完后建议再确认
SHOW CREATE DATABASE yourdbname;
-- 或
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'yourdbname';应用连接串、Django/PHP 的 charset、表级 charset 尽量和库一致,避免「库 utf8、表 latin1」的混搭。
为何记下
一人公司同时维护多个小项目,建库是高频动作。字符集一旦建错,迁移和修数据比建库时多写半行 SQL 贵得多。把上面两条模板留在备忘里,新建库直接改库名粘贴,少一次「页面问号」。



No comments yet