CREATE DATABASE 语句的基本写法
MySQL 创建数据库最直接的方式就是用
CREATE DATABASE,它不需要前置条件,只要用户有对应权限就能执行。最简形式是:
CREATE DATABASE mydb;这条命令会在 MySQL 实例中新建一个名为
mydb的数据库,字符集和排序规则都使用服务器默认值(通常是
utf8mb4和
utf8mb4_0900_ai_ci,取决于 MySQL 版本)。
指定字符集和排序规则的关键参数
生产环境几乎从不依赖默认值,因为中文、emoji 或特殊符号容易出乱码。必须显式声明
CHARACTER SET和
COLLATE:
CHARACTER SET utf8mb4:支持完整 Unicode(含 emoji),比旧的
utf8更可靠
COLLATE utf8mb4_unicode_ci:适合多语言排序比较;若需大小写敏感,可用
utf8mb4_bin
完整写法示例:
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;注意:两个参数要成对出现,只写
CHARACTER SET不写
COLLATE会自动补上对应默认排序规则,但显式写出更可控。
避免“Database exists”错误的防御写法
重复执行
CREATE DATABASE会报错
ERROR 1007 (HY000): Can't create database 'xxx'; database exists。加
IF NOT EXISTS可跳过报错,但要注意它只是防止报错,并不会覆盖或修改已有库的字符集: 已存在同名库且字符集不同?该语句不做任何变更,静默退出 想确保字符集一致,得先
DROP DATABASE再重建(慎用!线上禁用) 或者用
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;单独调整
安全创建写法:
CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysqladmin 命令行方式创建(非 SQL 场景)
有些自动化脚本或 CI/CD 流程里不用进 MySQL 客户端,而是直接调命令行工具。这时用
mysqladmin: 基本命令:
mysqladmin -u root -p create mydb,执行后会提示输入密码 它不支持指定字符集——建出来的库仍走 MySQL 全局默认配置 如果需要定制字符集,必须回到 SQL 方式,或在
my.cnf中提前配好
default-character-set
也就是说,
mysqladmin只适合快速测试,不能替代
CREATE DATABASE的精细控制。
真正容易被忽略的是:数据库创建后,
CREATE TABLE时如果不显式指定字符集,表会继承库级设置;但如果库是用默认值建的,而 MySQL 配置文件里又没统一设
utf8mb4,后续插入中文就可能报错或截断。所以建库这一步,不是“能跑就行”,而是整个数据一致性链条的第一环。
