# 创建 Schema/Database 

__*TiDB 对象名比较方式*__
__*lower_case_table_names*__

+ 语法:
  + `CREATE DATABASE [IF NOT EXISTS] database_name [options];`
  + `CREATE SCHEMA [IF NOT EXISTS] schema_name [options];`
+ 数据库里的对象命名只能使用英文字母、数字和下划线
  + 名称不能超过 64 个字符
  + 不能使用某些字符,包括 `ASCII(0), ASCII(255), /, \, .`  
  + 您可以使用保留字和特殊字符,但前提是使用反引号将其包围
+ 删除数据库:`DROP DATABASE [IF EXISTS] database_name;` 
  + 小心这是一个无法撤消的操作
+ TiDB 以区分大小写的方式存储对象名,但以不区分大小写的方式进行比较

```
tidb> show variables like 'lower_case_%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | 1     |
| ~!@lower_case_table_names@!~ | 2     |
+------------------------+-------+
```

------------------------------------------------------------------------------
数据库名建议按照业务、产品线或者其它指标进行区分,一般不要超过 20 个字符。

目前 TiDB 只支持将 lower-case-table-names 值设为 2,即按照大小写来保存表名,按照小写来比较（不区分大小写）。

CREATE DATABASE 用于创建数据库,并可以指定数据库的默认属性（如数据库默认字符集、排序规则）。CREATE SCHEMA 和 CREATE DATABASE 操作效果一样。

```
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification] ...
```

```
create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name
```

当创建已存在的数据库且不指定使用 IF NOT EXISTS 时会报错。

create_specification 选项用于指定数据库具体的 CHARACTER SET 和 COLLATE。目前 TiDB 只支持部分的字符集和排序规则,它们会在后续的内容中讲解。
