create database 语句需指定字符集和排序规则以确保中文支持,推荐写法为create database if not exists mydb character set utf8mb4 collate utf8mb4_unicode_ci;还需确认用户具备create权限且库名不冲突。

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 就不是一行命令的事,而是后续连不上、插不了、查不出的根源。










