MySQL: MySQL数据库操作与字符集配置
最后更新:2026-08-26
数据库是存储数据的容器——操作数据库是使用 MySQL 的第一步。
本课带你掌握数据库的增删改查和字符集配置。
graph TB
A[数据库操作] --> B[CREATE DATABASE<br/>创建数据库]
A --> C[SHOW DATABASES<br/>查看数据库]
A --> D[USE<br/>选择数据库]
A --> E[ALTER DATABASE<br/>修改字符集]
A --> F[DROP DATABASE<br/>删除数据库]
B --> B1[指定字符集 utf8mb4]
E --> E1[修改字符集/排序规则]
1. 你将学到
- 创建数据库并指定字符集
- 查看和选择数据库
- 修改数据库字符集
- 删除数据库
- 字符集与排序规则详解
2. 一个多语言网站的真实故事
(1) 痛点:中文乱码
一个开发者创建了电商数据库,插入中文商品名:
SQL
INSERT INTO products (name) VALUES ('苹果手机');
SELECT * FROM products;
结果:name 显示为 ??? 或乱码。
原因:数据库默认字符集是 latin1,不支持中文。
(2) utf8mb4 的解法
SQL
-- 创建数据库时指定 utf8mb4 字符集
CREATE DATABASE ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
收益: 支持中文、日文、韩文、Emoji 表情等所有 Unicode 字符。
| 字符集 | 支持范围 | 推荐度 |
|---|---|---|
| latin1 | 西欧字符 | ❌ |
| utf8 | 基本多语言(不支持 4 字节) | ⚠️ |
| utf8mb4 | 完整 Unicode(含 Emoji) | ⭐⭐⭐ |
3. 创建数据库
(1) 基本语法
SQL
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
▶ 示例:创建数据库
SQL
-- 最简单的创建
CREATE DATABASE mydb;
-- 如果不存在才创建(推荐)
CREATE DATABASE IF NOT EXISTS mydb;
-- 指定字符集(推荐)
CREATE DATABASE IF NOT EXISTS mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 创建电商数据库
CREATE DATABASE IF NOT EXISTS ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT '电商系统数据库';
输出:
TEXT
📖 仅展示
Query OK, 1 row affected (0.01 sec)
4. 查看数据库
▶ 示例:查看所有数据库
SQL
-- 查看所有数据库
SHOW DATABASES;
-- 查看创建数据库的语句
SHOW CREATE DATABASE mydb;
-- 查看当前使用的数据库
SELECT DATABASE();
输出:
TEXT
📖 仅展示
+--------------------+
| Database |
+--------------------+
| ecommerce |
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
5. 选择数据库
▶ 示例:USE 命令
SQL
-- 选择数据库
USE ecommerce;
-- 验证当前数据库
SELECT DATABASE();
输出:
TEXT
📖 仅展示
+------------+
| DATABASE() |
+------------+
| ecommerce |
+------------+
6. 修改数据库
▶ 示例:修改字符集
SQL
-- 修改数据库字符集
ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 验证修改
SHOW CREATE DATABASE mydb;
输出:
TEXT
📖 仅展示
+----------+------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------------------------------+
| mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |
+----------+------------------------------------------------------------------------------------------+
7. 删除数据库
▶ 示例:删除数据库
SQL
-- 删除数据库
DROP DATABASE mydb;
-- 安全删除(如果存在)
DROP DATABASE IF EXISTS mydb;
⚠️ 注意: 删除数据库会永久删除其中所有表和数据,无法恢复!操作前务必确认或备份。
8. 字符集与排序规则
(1) 常用字符集
| 字符集 | 字节长度 | 支持字符 | 使用场景 |
|---|---|---|---|
| ascii | 1 | 英文+数字 | 纯英文场景 |
| latin1 | 1 | 西欧字符 | 旧系统兼容 |
| utf8 | 1-3 | 基本多语言 | 旧版兼容 |
| utf8mb4 | 1-4 | 完整 Unicode | 推荐默认 |
(2) 排序规则
排序规则决定字符串的比较和排序方式。
| 排序规则 | 说明 | 区分大小写 |
|---|---|---|
| utf8mb4_general_ci | 通用,速度快 | 不区分 |
| utf8mb4_unicode_ci | 准确,支持多语言 | 不区分 |
| utf8mb4_bin | 二进制比较 | 区分 |
💡 提示:
_ci 表示 Case Insensitive(不区分大小写),_bin 表示二进制比较(区分大小写)。
▶ 示例:查看字符集
SQL
-- 查看所有字符集
SHOW CHARACTER SET;
-- 查看所有排序规则
SHOW COLLATION LIKE 'utf8mb4%';
-- 查看服务器默认字符集
SHOW VARIABLES LIKE 'character_set_server';
-- 查看数据库字符集
SHOW VARIABLES LIKE 'character_set_database';
输出:
TEXT
📖 仅展示
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_server | utf8mb4 |
+--------------------------+-----------------------------------------------+
9. 数据库备份与恢复
▶ 示例:mysqldump 备份
BASH
# 备份单个数据库
mysqldump -u root -p mydb > mydb_backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_backup.sql
# 只备份表结构
mysqldump -u root -p --no-data mydb > mydb_schema.sql
# 备份指定表
mysqldump -u root -p mydb users orders > tables_backup.sql
▶ 示例:恢复数据库
BASH
# 从备份文件恢复
mysql -u root -p mydb < mydb_backup.sql
# 在 MySQL 命令行中恢复
mysql> SOURCE /path/to/mydb_backup.sql;
❓ 常见问题
Q utf8 和 utf8mb4 有什么区别?
A utf8 最多 3 字节,不支持 Emoji 等 4 字节字符。utf8mb4 是完整的 UTF-8,推荐始终使用 utf8mb4。
Q 数据库名可以改吗?
A MySQL 不支持直接重命名数据库。可以创建新数据库,把表迁移过去,然后删除旧库。
Q 如何查看数据库大小?
A 查询
information_schema:SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb FROM information_schema.tables GROUP BY table_schema;Q DROP DATABASE 和 TRUNCATE DATABASE 区别?
A DROP 删除整个数据库(结构+数据),TRUNCATE 只清空数据保留结构(MySQL 没有 TRUNCATE DATABASE,需逐表 TRUNCATE)。
Q 字符集设置错了怎么改?
A 用 ALTER DATABASE 修改库字符集,用 ALTER TABLE 修改表字符集,用 CONVERT TO 转换已有数据。
📖 小节
- CREATE DATABASE 创建数据库,推荐使用
IF NOT EXISTS和utf8mb4 - USE 选择当前数据库,后续操作都在该库下执行
- SHOW DATABASES 查看所有数据库,SHOW CREATE DATABASE 查看创建语句
- ALTER DATABASE 修改数据库属性(字符集、排序规则)
- DROP DATABASE 删除数据库,操作前务必确认备份
- utf8mb4 是推荐字符集,支持完整 Unicode 和 Emoji
- mysqldump 用于数据库备份,mysql < file.sql 用于恢复
📝 作业
-
基础题(难度⭐):创建一个名为
school的数据库,字符集为utf8mb4,排序规则为utf8mb4_unicode_ci。 -
进阶题(难度⭐⭐):查看
school数据库的创建语句,确认字符集配置正确。然后创建一个测试表,插入包含 Emoji 的数据验证支持。 -
挑战题(难度⭐⭐⭐):编写一个备份脚本,备份
school数据库到backup/目录,文件名包含日期(如school_20260703.sql)。