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直接跑业务。