CREATE DATABASE 语句的基本写法
MySQL 创建数据库最直接的方式就是用
CREATE DATABASE,它不依赖其他表或上下文,执行成功后就生成一个空库。默认字符集是
utf8mb4(MySQL 8.0+),但老版本可能还是
latin1,这点必须主动确认。
最简写法:
CREATE DATABASE mydb;
但生产环境几乎从不这么写,因为没指定字符集和排序规则,后续插入中文可能报错或乱码。
必须指定 CHARACTER SET 和 COLLATE
中文支持靠的是
utf8mb4字符集(不是
utf8!MySQL 的
utf8是阉割版,不支持 emoji 和部分生僻汉字),搭配
utf8mb4_0900_ai_ci(MySQL 8.0)或
utf8mb4_unicode_ci(兼容性更广)。
推荐写法:
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CHARACTER SET utf8mb4确保能存四字节 Unicode 字符
COLLATE utf8mb4_unicode_ci支持更准确的中文、多语言排序与比较(
_ci表示 case-insensitive) 如果建库时报
Unknown collation,说明 MySQL 版本太低,先查
SHOW COLLATION LIKE 'utf8mb4%';看可用项
IF NOT EXISTS 防止重复创建报错
脚本反复执行时,直接
CREATE DATABASE会因库已存在而报错:
ERROR 1007 (HY000): Can't create database 'mydb'; database exists。加
IF NOT EXISTS可静默跳过。
安全写法:
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;注意:它只判断库是否存在,不会校验已有库的字符集是否匹配 —— 如果之前用
latin1建了同名库,这条语句不会改它,后续建表仍可能出编码问题 想强制重建?得先
DROP DATABASE IF EXISTS mydb;,但务必确认库内无重要数据
权限不足时 CREATE DATABASE 会直接拒绝
不是所有 MySQL 账号都能建库。
CREATE DATABASE需要用户拥有
CREATE权限(通常包含在
CREATE ROUTINE或
ALL PRIVILEGES中)。普通应用账号往往只有
SELECT/INSERT/UPDATE/DELETE,执行会报:
ERROR 1044 (42000): Access denied for user ... to database 'mydb'。
检查权限方法:
SHOW GRANTS FOR CURRENT_USER;若缺权限,需由管理员执行:
GRANT CREATE ON *.* TO 'username'@'host'; FLUSH PRIVILEGES;注意
ON *.*是全局级;如只需在某几个库操作,可限定为
ON `prefix_%`.*实现模式化授权 云数据库(如阿里云 RDS、腾讯云 CDB)常禁用
DROP DATABASE和部分
CREATE权限,建库需走控制台或工单
字符集、权限、是否存在 —— 这三件事不提前理清,
CREATE DATABASE就不是一行命令的事,而是后续连不上、插不了、查不出的根源。
