Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

case Sensitity #990

Merged
merged 3 commits into from
Mar 20, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
# lower_case_table_names 大小写敏感支持

关于 MatrixOne 大小写模式有 5 种,大小写参数 `lower_case_table_names` 可以设置为 0,1,2,3 和 4。
`lower_case_table_names` 是 MatrixOne 设置大小写是否敏感的一个参数。

!!! note
与 mysql 不同的是,MatrixOne 暂时只支持 **0** 和 **1** 两种模式,且在 linux 和 mac 系统下默认值都为 1。

## 配置

在命令行执行以下语句:

```sql
set global lower_case_table_names = 0;// 默认为 1,重新连接数据库生效
```

## 参数解释

### 参数值设置为 0
### 0

将 `lower_case_table_names` 设置为 0。标识符存储为原始字符串,名称比较大小写敏感。

**示例**

```sql
set global lower_case_table_names = 0;
create table Tt (Aa int);
insert into Tt values (1), (2), (3);

Expand All @@ -26,14 +36,13 @@ mysql> select Aa from Tt;
3 rows in set (0.03 sec)
```

### 参数值设置为 1
### 1

将 `lower_case_table_names` 设置为 1。标识符存储为小写,名称比较大小写不敏感。

**示例**

```sql
set global lower_case_table_names = 1;
create table Tt (Aa int);
insert into Tt values (1), (2), (3);

Expand All @@ -49,107 +58,17 @@ mysql> select Aa from Tt;
```

```sql
set global lower_case_table_names = 1;
create table t(a int);
insert into t values(1), (2), (3);

-- 列的别名在返回结果集时会显示原始字符串,但名称比较时大小写不敏感,示例如下:
mysql> select a as Aa from t;
mysql> select A as Aa from t;
+------+
| Aa |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.03 sec)
```

### 参数值设置为 2

将 `lower_case_table_names` 设置为 2。标识符存储为原始字符串,名称比较时大小写不敏感。

**示例**

```sql
set global lower_case_table_names = 2;
create table Tt (Aa int);
insert into tt values (1), (2), (3);

mysql> select AA from tt;
+------+
| Aa |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.03 sec)
```

### 参数值设置为 3

将 `lower_case_table_names` 设置为 3。标识符存储为大写,名称比较时大小写不敏感。

**示例**

```sql
set global lower_case_table_names = 3;
create table Tt (Aa int);
insert into Tt values (1), (2), (3);

mysql> select Aa from Tt;
+------+
| AA |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.03 sec)
```

### 参数值设置为 4

将 `lower_case_table_names` 设置为 4。带有 `` 的标识符存储为原始字符串,大小写敏感,其他转小写。

## 配置参数

- 如需全局配置,可在启动 MatrixOne 之前,修改配置文件 `cn.toml`,插入以下代码并保存:

```
[cn.frontend]
lowerCaseTableNames = "0" // 默认为 1
# 0 标识符存储为原始字符串,名称比较时大小写时,大小写敏感
# 1 标识符存储为小写,名称比较时大小写时,大小写不敏感
# 2 标识符存储为原始字符串,名称比较时大小写时,大小写不敏感
# 3 标识符存储为大写,名称比较时大小写时,大小写不敏感
# 4 带有``的标识符存储为原始字符串,大小写敏感,其他转小写
```

全局配置时,如果启动了多个 cn,那么每个 cn 都需要配置。如需查阅配置文件参数说明,参见[通用参数配置](../../System-Parameters/system-parameter.md)。

!!! note
当前仅支持设置参数为 0 或 1。但暂不支持设置为参数为 2,3 和 4。

- 仅对当前会话开启保存查询结果:

```sql
set lower_case_table_names = 1;
```

在创建数据库时,MatrixOne 会自动获取 `lower_case_table_names` 的值,作为初始化数据库配置的默认值。

## 与 MySQL 有差异的特性说明

MatrixOne lower_case_table_names 默认设置为 1,且仅支持设置该值为 0 或 1。

MySQL 默认如下:

- Linux 系统中该值为 0,表示表名和数据库名按照在 CREATE TABLE 或 CREATE DATABASE 语句中指定的字母大小写存储在磁盘上,且名称比较时区分大小写。
- Windows 系统中该值为 1,表示表名按照小写字母存储在磁盘上,名称比较时不区分大小写。MySQL 在存储和查询时将所有表名转换为小写。该行为也适用于数据库名称和表的别名。
- macOS 系统中该值为 2,表示表名和数据库名按照在 CREATE TABLE 或 CREATE DATABASE 语句中指定的字母大小写存储在磁盘上,但 MySQL 在查询时将它们转换为小写。名称比较时不区分大小写。

## **限制**

MatrixOne 系统变量 `lower_case_table_names` 大小写模式暂不支持设置值 2,3 和 4。
3 rows in set (0.00 sec)
```
Loading