在 MySQL中,可以使用 CREATE DATABASE 语句创建数据库,语法格式如下:
CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>] [[DEFAULT] COLLATE <校对规则名>];
语法 [DEFAULT] CHARACTER SET <字符集名> 也可以使用 [DEFAULT] CHARSET <字符集名> 的语法
其中[ ]
的内容是可选的。语法说明如下:
<数据库名>
:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。IF NOT EXISTS
:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。[DEFAULT] CHARACTER SET
:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。[DEFAULT] COLLATE
:指定字符集的默认校对规则。MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。
字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。
mysql> CREATE DATABASE test_db_d character set utf8mb4;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE DATABASE test_db_ddd charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
在 MySQL 命令行客户端输入 SQL 语句CREATE DATABASE test_create;
即可创建一个数据库,输入的 SQL 语句与执行结果如下。
mysql> CREATE DATABASE test_create;
Query OK, 1 row affected (0.00 sec)
若再次输入CREATE DATABASE test_create;
语句,则系统会给出错误提示信息,如下所示:
mysql> CREATE DATABASE test_create;
ERROR 1007 (HY000): Can't create database 'test_create'; database exists
提示不能创建“test_create”数据库,数据库已存在。MySQL 不允许在同一系统下创建两个相同名称的数据库。
可以加上IF NOT EXISTS
从句,就可以避免类似错误,如下所示:
mysql> CREATE DATABASE IF NOT EXISTS test_create;
Query OK, 1 row affected, 1 warning (0.00 sec)
提示:1 warning
使用 MySQL 命令行工具创建一个测试数据库,命名为 test_create_char,指定其默认字符集为 utf8mb4,默认校对规则为 utf8mb4_general_ci,输入的 SQL 语句与执行结果如下所示:
mysql> CREATE DATABASE test_create_char
-> CHARACTER SET utf8mb4
-> COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0.00 sec)
这时,可以使用 SHOW CREATE DATABASE
查看 test_create_char 数据库的定义声明,发现该数据库的指定字符集为 utf8mb4,运行结果如下所示:
mysql> SHOW CREATE DATABASE test_create_char;
+------------------+------------------------------------------------------------------------------+
| Database | Create Database |
+------------------+------------------------------------------------------------------------------+
| test_create_char | CREATE DATABASE `test_create_char` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+------------------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
“1 row in set (0.00 sec)”表示集合中有 1 行信息,处理时间为 0.00秒。时间为 0.00 秒并不代表没有花费时间,而是时间非常短,小于 0.01 秒。