mysql如何创建数据库_mysql create database操作讲解

来源:这里教程网 时间:2026-02-28 20:52:19 作者:

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

相关推荐