天天看点

达梦数据库知识点之-大小写敏感总结

作者:贺浦力特

查看数据库大小写是否敏感

SELECT CASE_SENSITIVE();

结果为 1 是大小写敏感;结果为 0 是不敏感

下面从对象名, 字符串内容, 常用工具这三个方面介绍达梦数据库的大小写敏感和大小写不敏感设置的区分和介绍

一 对象名

1. 大小写敏感

CREATE TABLE TEST.Abc(COL INT); -- 对于创建表, 在大小写敏感的情况下, 表名Abc不加双引号, 系统会自动转换成大写表名ABC

查询情况如下:

SELECT * FROM TEST.Abc; -- 执行成功

SELECT * FROM TEST.ABC; -- 执行成功

SELECT * FROM TEST."Abc"; -- error: 无效的表或视图名[Abc]

SELECT * FROM TEST."ABC"; -- 执行成功

CREATE TABLE TEST."Abc"(COL INT); -- 对于创建表, 在大小写敏感的情况下, 表名Abc加双引号, 即创建的表为Abc

查询情况如下:

SELECT * FROM TEST.Abc; -- error: 无效的表或视图名[ABC]

SELECT * FROM TEST.ABC; -- error: 无效的表或视图名[ABC]

SELECT * FROM TEST."Abc"; -- 执行成功

SELECT * FROM TEST."ABC"; -- error: 无效的表或视图名[ABC]

注意: (大小写敏感的情况下 ) 在达梦管理工具 (manager ) 中使用图形化界面的方式创建对象时, 如果使用的是小写, 系统会自动加上双引号在查询的时候必须使用双引号来访问

2. 大小写不敏感

CREATE TABLE a(C1 INT); -- 对于创建表, 在大小写不敏感的情况下, 表名a是否加双引号, 对查询结果没有影响

查询情况如下:

SELECT * FROM a; -- 执行成功

SELECT * FROM A; -- 执行成功

SELECT * FROM "a"; -- 执行成功

SELECT * FROM "A"; -- 执行成功

CREATE TABLE "b"(C1 INT);

查询情况如下:

SELECT * FROM b; -- 执行成功

SELECT * FROM B; -- 执行成功

SELECT * FROM "b"; -- 执行成功

SELECT * FROM "B"; -- 执行成功

二字符串内容

CREATE TABLE MMJ(COL VARCHAR(100)); -- 创建表MMJ

INSERT INTO MMJ VALUES('Abc'); -- 插入数据Abc

INSERT INTO MMJ VALUES('ABC'); -- 插入数据ABC

1. 大小写敏感

SELECT COUNT(*) FROM MMJ WHERE COL='Abc'; -- 结果为1

SELECT COUNT(*) FROM MMJ WHERE COL='ABC'; -- 结果为1

2. 大小写不敏感

SELECT COUNT(*) FROM MMJ WHERE COL='Abc'; -- 结果为2

SELECT COUNT(*) FROM MMJ WHERE COL='ABC'; -- 结果为2

三不同工具访问数据库

1. disql访问数据库

需要注意的是: 密码中含有 "@ ", "/ "等特殊字符, 此时需要通过转义符来处理

disql 转义符使用如下:

linux 环境: 需要使用双引号将密码包含进来, 同时外层再使用单引号进行转义, 具体例子: ./disql SYSDBA/' "abcd@efgh" '@localhost

windows环境: 需要使用双引号将密码包含进来, 同时对双引号使用 "\ "进行转义, 具体例子: disql SYSDBA/\"abcd@efgh\"@localhost

2. manager访问数据库

1 ) 大小写敏感:

创建小写表对象: 需要添加双引号来创建

创建大写表对象: 不需要添加双引号来

创建查询小写表对象: 需要添加双引号查询

查询大写表对象: 不需要添加双引号查询

2 ) 大小写不敏感:

创建小写表对象: 需要添加双引号来创建

创建大写表对象: 不需要添加双引号来创建

查询小写表对象: 不需要添加双引号来创建

查询大写表对象: 不需要添加双引号来创建

不论是大小写敏感还是不敏感, 需要注意 账号重复

create user "bb " identified by "11111111111 "

create user "BB " identified by "11111111111 " -- 报错: 对象[BB]已存在

3. DTS迁移工具

1 ) 大小写敏感:

表对象小写: 如果想要迁移过来表对象仍然保持小写, 需要勾选 "保持对象名大小写 ", 后期查询时, 需要使用双引号查询

表对象大写: 不需要勾选 "保持对象名大小写 ", 后期查询时, 不需要使用双引号查询, 因为会自动转换成大写查询

2 ) 大小写不敏感:

表对象小写: 如果想要迁移过来表对象仍然保持小写, 需要勾选 "保持对象名大小写 ", 后期查询时, 不需要使用双引号查询

表对象大写: 不需要勾选 "保持对象名大小写 ", 后期查询时, 不需要使用双引号查询, 因为会自动转换成大写查询

总结

1. 在大小写敏感的数据库中

1 ) 创建表:

若表名或列名未添加双引号 "", 则表名和列名会自动转换为大写形式;

若对表名或列名添加双引号 "", 则会固定书写时的大, 小写;

同名的数据库对象, 如果大小写不同, 那么则为两个不同的对象

2 ) 字段同上:

一个表中, 即使是相同的字段名, 只要大小写不同, 允许存在同名且不同大小写形式的字段

3 ) DML 或 DDL 操作时:

如果不对表名或列名添加双引号 "", 那么表名和列名都自动转换为大写形式;

对表进行 DML 操作时, 如果没有小写形式的字段, 不能采取小写加 "" 的形式指定过滤字段, 会被认定为无效的字段;

如果对表名或列名添加 "" 会固定书写时的大, 小写形式, "" 中是大写形式, 则过滤字段就是大写字段, "" 中是小写字段, 则过滤字段就是小写字段;

对其进行 DML 操作时, 需要利用 "" 指定表名和字段名, 否则默认会认定以大写形式去查询对象

查询时, '' 和 "" 界定符中字符串区分大小写, 界定符中的字符串若是大写形式, 那仅查询这个大写形式的对象, 若是或小写形式, 那仅查询这个小写形式的对象, DML 操作依旧

2. 大小写不敏感的数据库中

1 ) 创建表时:

无论对不对表名或列名添加双引号 "", 表名和列名的大小写形式不会发生变化, 大写形式就是大写形式, 小写形式就是小写形式;

2 ) 字段同上:

不允许相同的字段名, 即使大小写不同;

查询时, '' 和 "" 界定符不区分大小写, 界定符中的查询或过滤条件即使是大写或小写, 都可以查询到预期的结果集.

3 ) DML 或 DDL 操作时:

无论对不对表名或列名添加 "", 表名和列名的大小写形式不会发生变化, 大写形式就是大写形式, 小写形式就是小写形式;

一个表中, 不允许相同的字段名, 即使大小写不同;

查询时, '' 和 "" 界定符不区分大小写, 界定符中的查询或过滤条件即使是大写或小写, 都可以查询到预期的结果集, 进行 DML 操作时依旧

在大小写不敏感的情况下, 以上情况均不允许存在同名的数据库对象, 即使大小写不同, 默认也只能存在一个

继续阅读