MySQL 创建数据库时指定字符集(utf8 / gbk)

建库时用 DEFAULT CHARSET 写死 utf8 或 gbk,避免后期中文乱码;新项目更推荐 utf8mb4。

做 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