MySQL创建数据库

MySQL创建数据库

引言

新项目第一步往往是建库,CREATE DATABASE语法简单,但字符集和排序规则选错会在后期引发中文乱码、表情存不下、排序不一致等麻烦,最好在建库时一次定好。

基本建库

CREATE DATABASE mydb;

用默认字符集建库,生产环境不建议这样,最好显式指定。

指定字符集建库(推荐)

CREATE DATABASE mydb
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

utf8mb4支持完整Unicode和emoji,general_ci不区分大小写,绝大多数Web项目够用。

判断不存在再建

CREATE DATABASE IF NOT EXISTS mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

IF NOT EXISTS防止重复执行报错,初始化脚本常用。

查看建库语句

SHOW CREATE DATABASE mydb;

确认字符集、排序规则和预期一致。

修改已有库字符集

ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

只改库默认值,已有表和列的字符集不会跟着变,需逐表处理。

删除数据库

DROP DATABASE IF EXISTS mydb;

不可逆,删前必须备份,IF EXISTS避免报错中断脚本。

授权配合

CREATE USER 'appuser'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL ON mydb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

建库后给专用账号授权,不用root跑业务。

注意事项

  • 统一utf8mb4,别用过时的utf8(只占3字节);
  • 排序规则ci结尾不区分大小写,bin区分;
  • 库名小写、下划线分隔,避免跨平台大小写坑;
  • 业务账号最小权限,禁止给ALL on .;
  • ALTER库字符集不改存量表,需单独刷表;
  • 初始化脚本加IF NOT EXISTS保证可重复执行。

总结

CREATE DATABASE建库,生产显式指定utf8mb4和排序规则,IF NOT EXISTS让脚本可重复执行,SHOW CREATE核对,ALTER只改默认值,DROP不可逆先备份,配合专用账号最小授权。建库定好字符集能避免后期乱码,库名规范小写,权限按库授予,别用root直接跑业务。


emer 发布于  2026-10-20 07:12