🗄️ MySQL 创建数据库

数据库是存储相关数据的容器。本章将详细介绍如何在 MySQL 中创建数据库,包括语法、字符集设置、排序规则以及 MySQL 5.7 和 8.x 版本的差异。

📊 MySQL 5.7 vs 8.x 默认设置对比

设置项 MySQL 5.7 MySQL 8.x
默认字符集 latin1 utf8mb4
默认排序规则 latin1_swedish_ci utf8mb4_0900_ai_ci
Unicode 支持 需手动设置 utf8mb4 默认完整 Unicode 支持
Emoji 支持 需设置 utf8mb4 默认支持

📝 基本语法

CREATE DATABASE 语法

-- 基本语法 CREATE DATABASE [IF NOT EXISTS] database_name [CHARACTER SET charset_name] [COLLATE collation_name]; -- 简单示例 CREATE DATABASE myapp; -- 完整示例 CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 安全创建(如果不存在才创建) CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

语法参数说明

🔤 字符集和排序规则

常用字符集

-- 查看所有可用字符集 SHOW CHARACTER SET; -- 常用字符集 utf8mb4 -- 完整的UTF-8编码,支持4字节字符(推荐) utf8 -- UTF-8编码,最多3字节(不推荐,不支持emoji) latin1 -- 西欧字符集 gbk -- 中文字符集 ascii -- ASCII字符集

常用排序规则

-- 查看字符集对应的排序规则 SHOW COLLATION LIKE 'utf8mb4%'; -- UTF8MB4 常用排序规则 utf8mb4_unicode_ci -- Unicode标准排序,支持多语言(推荐) utf8mb4_general_ci -- 通用排序,性能较好 utf8mb4_bin -- 二进制排序,区分大小写 utf8mb4_0900_ai_ci -- MySQL 8.x 默认,支持最新Unicode标准 -- 排序规则后缀含义 _ci -- Case Insensitive(不区分大小写) _cs -- Case Sensitive(区分大小写) _bin -- Binary(二进制排序) _ai -- Accent Insensitive(不区分重音) _as -- Accent Sensitive(区分重音)

MySQL 8.x 新增排序规则特性

  • utf8mb4_0900_ai_ci:基于 Unicode 9.0 标准
  • 更好的多语言支持:改进的排序算法
  • 性能优化:更快的字符串比较
-- MySQL 8.x 推荐的数据库创建方式 CREATE DATABASE modern_app CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

💡 实际应用示例

1. 创建电商系统数据库

-- 电商系统数据库 CREATE DATABASE IF NOT EXISTS ecommerce CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '电商系统数据库'; -- 验证创建结果 SHOW CREATE DATABASE ecommerce;

2. 创建多语言博客数据库

-- 多语言博客数据库(MySQL 8.x) CREATE DATABASE IF NOT EXISTS blog_multilang CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '多语言博客系统'; -- 多语言博客数据库(MySQL 5.7 兼容) CREATE DATABASE IF NOT EXISTS blog_multilang_57 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '多语言博客系统 - MySQL 5.7 兼容';

3. 创建日志系统数据库

-- 日志系统数据库(性能优先) CREATE DATABASE IF NOT EXISTS logs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '系统日志数据库';

4. 创建区分大小写的数据库

-- 需要区分大小写的数据库 CREATE DATABASE IF NOT EXISTS case_sensitive_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '区分大小写的数据库';

🔍 数据库信息查询

查看数据库列表

-- 查看所有数据库 SHOW DATABASES; -- 查看数据库(带模式匹配) SHOW DATABASES LIKE 'my%'; -- 使用 INFORMATION_SCHEMA 查询 SELECT SCHEMA_NAME as '数据库名' FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys') ORDER BY SCHEMA_NAME;

查看数据库详细信息

-- 查看数据库创建语句 SHOW CREATE DATABASE myapp; -- 查看数据库字符集和排序规则 SELECT SCHEMA_NAME as '数据库名', DEFAULT_CHARACTER_SET_NAME as '字符集', DEFAULT_COLLATION_NAME as '排序规则' FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'myapp'; -- 查看当前使用的数据库 SELECT DATABASE(); -- 查看数据库大小 SELECT table_schema as '数据库', ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as '大小(MB)' FROM information_schema.tables WHERE table_schema = 'myapp' GROUP BY table_schema;

✅ 最佳实践

1. 命名规范

-- ✅ 好的命名示例 CREATE DATABASE user_management; CREATE DATABASE ecommerce_system; CREATE DATABASE blog_platform; -- ❌ 不好的命名示例 CREATE DATABASE Database; -- 使用了保留字 CREATE DATABASE db1; -- 名称不够描述性 CREATE DATABASE UserManagement; -- 使用了大写字母

2. 字符集选择建议

-- 推荐:现代应用使用 utf8mb4 CREATE DATABASE modern_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- MySQL 8.x 推荐 CREATE DATABASE modern_app_8x CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; -- 性能敏感应用 CREATE DATABASE performance_app CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3. 创建数据库脚本模板

-- 完整的数据库创建脚本模板 -- 检查并删除已存在的数据库(可选) -- DROP DATABASE IF EXISTS myapp; -- 创建数据库 CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '应用程序数据库'; -- 验证创建结果 SHOW CREATE DATABASE myapp; -- 使用数据库 USE myapp; -- 显示当前数据库 SELECT DATABASE() as '当前数据库';

⚠️ 注意事项

1. 字符集兼容性

2. 排序规则影响

-- 不同排序规则的比较结果 -- utf8mb4_general_ci: 'A' = 'a' = 'À' = 'á' -- utf8mb4_bin: 'A' ≠ 'a' ≠ 'À' ≠ 'á' -- utf8mb4_unicode_ci: 'A' = 'a', 'À' = 'à', 但 'A' ≠ 'À' -- 测试排序规则差异 SELECT 'A' = 'a' COLLATE utf8mb4_general_ci as general_ci; SELECT 'A' = 'a' COLLATE utf8mb4_bin as binary;

3. 性能考虑

🛠️ 数据库管理操作

切换数据库

-- 使用 USE 语句切换数据库 USE myapp; -- 验证当前数据库 SELECT DATABASE();

修改数据库属性

-- 修改数据库字符集和排序规则 ALTER DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; -- 仅修改字符集 ALTER DATABASE myapp CHARACTER SET utf8mb4; -- 仅修改排序规则 ALTER DATABASE myapp COLLATE utf8mb4_unicode_ci;

数据库备份和恢复

-- 备份数据库结构(仅结构,不包含数据) mysqldump -u root -p --no-data myapp > myapp_structure.sql -- 备份完整数据库 mysqldump -u root -p myapp > myapp_backup.sql -- 恢复数据库 mysql -u root -p myapp < myapp_backup.sql -- 创建数据库并恢复 mysql -u root -p -e "CREATE DATABASE myapp_restored CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" mysql -u root -p myapp_restored < myapp_backup.sql

📋 完整示例:创建项目数据库

-- 项目数据库创建完整脚本 -- ================================ -- 1. 检查 MySQL 版本 SELECT VERSION() as 'MySQL版本'; -- 2. 查看当前字符集设置 SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; -- 3. 创建项目数据库 CREATE DATABASE IF NOT EXISTS project_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '项目管理系统数据库'; -- 4. 验证创建结果 SHOW CREATE DATABASE project_management; -- 5. 使用数据库 USE project_management; -- 6. 创建用户并授权(可选) CREATE USER IF NOT EXISTS 'project_user'@'localhost' IDENTIFIED BY 'secure_password'; GRANT ALL PRIVILEGES ON project_management.* TO 'project_user'@'localhost'; FLUSH PRIVILEGES; -- 7. 验证权限 SHOW GRANTS FOR 'project_user'@'localhost'; -- 8. 显示最终状态 SELECT DATABASE() as '当前数据库', USER() as '当前用户', @@character_set_database as '数据库字符集', @@collation_database as '数据库排序规则';