数据库是存储数据的容器。一个数据中可以包含多个表。要想创建表,必须首先创建数据库。
在 MySQL 中,CREATE DATABASE
和 CREATE SCHEMA
语句用来创建数据库。
CREATE DATABASE
语句用来创建数据库。以下是 CREATE DATABASE
语句的语法:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name[create_option] ...create_option:[DEFAULT] {CHARACTER SET [=] charset_name| COLLATE [=] collation_name| ENCRYPTION [=] {'Y' | 'N'}}
语法说明:
关键字 | 参数 | 说明 | 是否可选 |
---|---|---|---|
CREATE DATABASE 或 CREATE SCHEMA | db_name | 两者产生效果一致,参数为创建数据库的名称 | 必填 |
IF NOT EXISTS | - | 表示指定的数据库不存在的情况下才创建 | 可选 |
CHARACTER SET <charset_name> | charset_name | 指定数据库的字符集(默认使用数据库服务器的配置) | 可选 |
COLLATE <collation_name> | collation_name | 指定数据库的排序规则(默认使用数据库服务器的配置) | 可选 |
ENCRYPTION | 'Y' | 'N' | 指定数据库是否加密(默认使用数据库服务器的配置) | 可选 |
数据库命名要求:
虽然语法看起来复杂,但最常用的就是下面这句:
CREATE DATABASE db_name;
官方文档:CREATE DATABASE Statement
MySQL数据库支持多种字符集,字符集决定了数据库可以存储哪些字符。在 MySQL 中,字符集主要用于指定表、列或者数据库可以存储的字符类型。以下是MySQL中一些常见的字符集类型及其说明:
每种字符集都有其特定的用途和支持的语言范围。选择合适的字符集对于存储和处理国际化数据是非常重要的。例如,如果你的应用需要处理多语言数据,包括表情符号等,utf8mb4 是一个很好的选择。而如果数据主要是英文,latin1 或 ASCII 可能就足够了。使用合适的字符集可以帮助优化存储效率和查询性能。
在 MySQL 中,创建数据库时可以指定排序规则(Collation),排序规则决定了数据库中字符比较和排序的行为。MySQL 提供多种排序规则,以支持不同的字符集和多种语言的特定需求。每个字符集都有默认的排序规则,但也可以指定其他兼容的排序规则。排序规则的命名通常遵循字符集_排序规则的格式。以下是一些常见的排序规则类型及其说明:
_ci
:Case Insensitive,不区分大小写的排序规则。例如,utf8mb4_general_ci
表示对于 utf8mb4
字符集的比较和排序是不区分大小写的。_cs
:Case Sensitive,区分大小写的排序规则。例如,utf8mb4_bin
通常是区分大小写的,_bin
表示“二进制”,在这种排序规则下,比较是基于字符的二进制值,从而实现区分大小写以及特殊字符的精确比较。_bin
:Binary,即“二进制”排序规则,它基于字符的二进制值进行比较,这是最精确的比较方式,可以区分大小写和字符的不同变体。例如,latin1_bin
。_general_ci
和 _unicode_ci
:这些排序规则为不同的字符集提供了优化的性能和比较的准确性。_general_ci
是一种比较通用的不区分大小写的比较方法,它的性能比_unicode_ci好,但可能在某些语言的字符比较上不够准确。_unicode_ci是基于Unicode标准的,提供了更为准确的语言特定字符比较,尤其是在处理多语言环境时。_ai
和 _as
:Accent Insensitive (_ai) 和 Accent Sensitive (_as),这些排序规则决定了数据库如何处理字符的变音符号。例如,西班牙语中,“ń”和“n”在 Accent Sensitive 排序规则下被视为不同字符,而在 Accent Insensitive 排序规则下则被视为相同字符。排序规则的选择取决于应用场景。例如,如果你的应用需要支持多种语言,并且对字符的比较需要尽可能准确,那么选择一个支持多语言的、基于 Unicode 的排序规则会是一个好的选择。如果应用主要处理英文数据,并且对性能要求较高,则选择一个简单的、不区分大小写的排序规则可能更合适。
MySQL 允许你为每个表甚至每个列指定排序规则,这提供了极大的灵活性来优化应用的性能和准确性。在设计数据库和应用时,合理选择字符集和排序规则对于确保数据的正确性、提高查询性能以及支持国际化非常关键。
MySQL提供了透明数据加密(TDE)功能,这是一种服务器端的加密技术,可以实现对数据的透明加密和解密,对应用程序透明。透明数据加密主要用于加密数据库的物理文件,如数据文件和日志文件。使用 TDE 时,数据库管理员不需要修改应用程序代码来实现加密,MySQL 会自动处理加密和解密过程。
总的来说,是否启用数据库加密取决于对数据安全性和性能的需求。对于包含敏感信息的数据库,推荐启用加密以保护数据安全。对于对性能要求极高且不包含敏感信息的情况,可以考虑不启用加密以提高性能。在任何情况下,都应该根据实际情况和合规性要求来决定是否启用数据库加密。