TiDB-学习笔记05

 编写这个笔记,希望能记录下学习TiDB时候的知识点。


目录

参考文章

第五章

1.数据库和字符集


参考文章

目的 链接&详细
TiDB Books

TiDB 6.x in Action | TiDB Books 【6.0版】

Introduction · TiDB in Action 【4.0版】

TiDB-学习笔记_tidb 查询_R&Y的博客-CSDN博客

第五章

对应课程

TiDB 特有功能与事务控制 [TiDB v6.1](201.3)的“02 数据库与字符集”

1.数据库和字符集 

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

*数据库里的对象命名只能使用英文字母、数字和下划线
*名称不能超过 64 个字符
*不能使用某些字符,包括 ASCII(0), ASCII(255), /, \, .
*可以使用保留字和特殊字符,但前提是使用 反引号` 将其包围

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 只支持将 lower-case-table-names 值设为 2,即按照大小写来保存表名,按照小写来比较(不区分大小写)。

创建 Schema/Database
语法:
CREATE DATABSAE [IF NOT EXISTS] database_name [options];
CREATE SCHEMA [IF NOT EXISTS] schema_name [options];


删除数据库: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     |
+------------------------+-------+

目前 TiDB 只支持部分的字符集和排序规则,会在后续的内容中讲解。

字符集和排序规则
SHOW CHARACTER SET: 列出支持的字符集
SHOW COLLATION: 列出支持的排序规则

tidb> SHOW COLLATION;
+--------------------+---------+------+---------+----------+---------+
| Collation          | Charset | Id   | Default | Compiled | Sortlen |
+--------------------+---------+------+---------+----------+---------+
| ascii_bin          | ascii   |   65 | Yes     | Yes      |       1 |
| binary             | binary  |   63 | Yes     | Yes      |       1 |
| gbk_bin            | gbk     |   87 |         | Yes      |       1 |
| gbk_chinese_ci     | gbk     |   28 | Yes     | Yes      |       1 |
| latin1_bin         | latin1  |   47 | Yes     | Yes      |       1 |
| utf8_bin           | utf8    |   83 | Yes     | Yes      |       1 |
| utf8_general_ci    | utf8    |   33 |         | Yes      |       1 |
| utf8_unicode_ci    | utf8    |  192 |         | Yes      |       1 |
| utf8mb4_bin        | utf8mb4 |   46 | Yes     | Yes      |       1 |
| utf8mb4_general_ci | utf8mb4 |   45 |         | Yes      |       1 |
| utf8mb4_unicode_ci | utf8mb4 |  224 |         | Yes      |       1 |
+--------------------+---------+------+---------+----------+---------+
11 rows in set (0.00 sec)

e.g:
CREATE DATABASE universe DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

字符集 (character set) 是符号与编码的集合。

TiDB 中的默认字符集是 utf8mb4,与 MySQL 8.0 及更高版本中的默认字符集匹配。

排序规则 (collation) 是在字符集中比较字符以及字符排序顺序的规则。

COLLATE 子句
tidb> select * from test.c1 order by name;
+------+
| name |
+------+
| A    |
| B    |
| C    |
| a    |
| b    |
| c    |
+------+


tidb> select * from test.c1 order by name collate utf8mb4_unicode_ci;
+------+
| name |
+------+
| A    |
| a    |
| B    |
| b    |
| C    |
| c    |
+------+

 

以下示例取自官方文档: https://docs.pingcap.com/zh/tidb/v6.0/character-set-and-collation:

观察在排序规则为 utf8mb4_bin 和 utf8mb4_general_ci 情况下两个不同的结果:

tidb> SET NAMES utf8mb4 COLLATE utf8mb4_bin;
tidb> SELECT 'A' = 'a';
+-----------+
| 'A' = 'a' |
+-----------+
|         0 |
+-----------+

tidb> SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
tidb> SELECT 'A' = 'a';
+-----------+
| 'A' = 'a' |
+-----------+
|         1 |
+-----------+


你可能感兴趣的:(TiDB,SQL,数据库,tidb)