注册
关于控制标识符大小敏感参数CASE_SENSITIVE的一些测试
专栏/培训园地/ 文章详情 /

关于控制标识符大小敏感参数CASE_SENSITIVE的一些测试

夏子豪 2024/12/16 463 1 0
摘要

CASE_SENSITIVE

  • 名称:case_sensitive
  • 含义:标识符大小写是否敏感。Y、y、1 表示敏感,N、n、0 表示不敏感,标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较
  • 取值:只能是 Y, y, N, n,1,0 之一,默- 认大小写敏感。
  • 修改方式:此参数在数据库创建成功后无法修改
  • ps:标识符:数据库标识符,也称为数据对象名、键名或别名,是指在数据库系统中用于唯一标识数据库中的实体(如表、字段、索引、视图等)的名称。

测试一:条件查询数据匹配测试

大小写敏感

  • 参数值检验:

服务器[127.0.0.1:5235]:处于普通打开状态
登录使用时间 : 17.860(ms)
disql V8
SQL> select case_sensitive();

行号     CASE_SENSITIVE()
---------- ----------------
1          1

  • 准备测试数据:
create table test (a1 varchar,a2 number);
insert into test values ('AS',1);
insert into test values ('as',2);
insert into test values ('As',3);
insert into test values ('as',3);

  • 查询结果
SQL>  select * from test;

行号     A1 A2
---------- -- --
1          as 2
2          AS 1
3          As 3
4          as 3
SQL> select * from test where a1='as';

行号     A1 A2
---------- -- --
1          as 2
2          as 3
SQL>  select * from test where a1='AS';

行号     A1 A2
---------- -- --
1          AS 1
  • 结论
1,存入数据对应的字符大小写与插入数据大小写一致
2,数值匹配会区分大小写

大小写不敏感

  • 参数值校验
[dmdba@MPP2 ~]$ disql sysdba/dmdba123456@127.0.0.1:4567

服务器[127.0.0.1:4567]:处于普通打开状态
登录使用时间 : 27.136(ms)
disql V8
SQL> select case_sensitive();

行号     CASE_SENSITIVE()
---------- ----------------
1          0

  • 准备测试数据
create table test (a1 varchar,a2 number);
insert into test values ('AS',1);
insert into test values ('as',2);
insert into test values ('As',3);
insert into test values ('as',3);
  • 查询结果
SQL> select * from test where a1='As';

行号     a1 a2
---------- -- --
1          AS 1
2          as 2
3          As 3
4          as 3
SQL> select * from test where a1='as';

行号     a1 a2
---------- -- --
1          AS 1
2          as 2
3          As 3
4          as 3
SQL>  select * from test where a1='AS';

行号     a1 a2
---------- -- --
1          AS 1
2          as 2
3          As 3
4          as 3

  • 结论
1,存入数据对应的字符大小写与插入数据大小写一致
2,数值匹配不会区分大小写

测试二:约束校验数据匹配测试

大小写敏感

  • 参数值校验
[dmdba@MPP2 ~]$ disql sysdba/dmdba123456@127.0.0.1:5235

服务器[127.0.0.1:5235]:处于普通打开状态
登录使用时间 : 17.860(ms)
disql V8
SQL> select case_sensitive();

行号     CASE_SENSITIVE()
---------- ----------------
1          1
  • 准备测试数据:表不允许创建
SQL> create table tests (a1 varchar PRIMARY KEY,a2 number);
create table tests (a1 varchar PRIMARY KEY,a2 number);
第1 行附近出现错误[-2750]:随机分布表不支持UNIQUE索引.
已用时间: 0.669(毫秒). 执行号:0.
  • 查询结果
 表不允许创建
  • 结论
1,区分大小写时含主键唯一约束的表会被识别为随机分布表,不允许创建

大小写不敏感

  • 参数值校验
[dmdba@MPP2 ~]$ disql sysdba/dmdba123456@127.0.0.1:4567

服务器[127.0.0.1:4567]:处于普通打开状态
登录使用时间 : 27.136(ms)
disql V8
SQL> select case_sensitive();

行号     CASE_SENSITIVE()
---------- ----------------
1          0
  • 准备测试数据
SQL> create table tests (a1 varchar PRIMARY KEY,a2 number);
操作已执行
已用时间: 3.629(毫秒). 执行号:66715.

SQL> create table testss (a1 varchar PRIMARY KEY,a2 number);
操作已执行
已用时间: 4.106(毫秒). 执行号:66734.
SQL> insert into tests values ('AS',1);
影响行数 1

已用时间: 0.908(毫秒). 执行号:66728.
SQL> insert into tests values ('AS',3);
insert into tests values ('AS',3);
[-6602]:违反表[tests]唯一性约束条件[CONS134218801].
已用时间: 0.579(毫秒). 执行号:0.
SQL> insert into tests values ('as',2);
insert into tests values ('as',2);
[-6602]:违反表[tests]唯一性约束条件[CONS134218801].
已用时间: 0.665(毫秒). 执行号:0.


SQL> insert into testss values ('as',2);
影响行数 1

已用时间: 0.910(毫秒). 执行号:66739.
SQL> insert into testss values ('AS',3);
insert into testss values ('AS',3);
[-6602]:违反表[testss]唯一性约束条件[CONS134218802].
已用时间: 0.561(毫秒). 执行号:0.
SQL> insert into testss values ('as',3);
insert into testss values ('as',3);
[-6602]:违反表[testss]唯一性约束条件[CONS134218802].
已用时间: 0.951(毫秒). 执行号:0.
  • 查询结果
SQL> select * from tests;

行号     a1 a2
---------- -- --
1          AS 1

已用时间: 0.814(毫秒). 执行号:66732.

SQL> select * from testss;

行号     a1 a2
---------- -- --
1          as 2

已用时间: 0.548(毫秒). 执行号:66742.
  • 结论
1存入数据对应的字符大小写与插入数据大小写一致
2,约束匹配时不区分大小写。

测试三:数据库对象匹配测试

大小写敏感

  • 参数值校验
[dmdba@MPP2 ~]$ disql sysdba/dmdba123456@127.0.0.1:5235

服务器[127.0.0.1:5235]:处于普通打开状态
登录使用时间 : 17.860(ms)
disql V8
SQL> select case_sensitive();

行号     CASE_SENSITIVE()
---------- ----------------
1          1
  • 准备测试数据
SQL> create table test (a1 varchar,a2 number);
操作已执行
已用时间: 11.382(毫秒). 执行号:4741.

SQL> create table Test (a1 varchar,a2 number);
create table Test (a1 varchar,a2 number);
第1 行附近出现错误[-2124]:对象[TEST]已存在.
已用时间: 0.570(毫秒). 执行号:0.

SQL> create table "Test" (a1 varchar,a2 number);
操作已执行
已用时间: 17.716(毫秒). 执行号:4742.


SQL> create table Tests (a1 varchar,a2 number);
操作已执行
已用时间: 13.001(毫秒). 执行号:4771.
SQL> create table TESTSS (a1 varchar,a2 number);
操作已执行
已用时间: 11.273(毫秒). 执行号:4772.

SQL> insert into test values ('AS',1);
影响行数 1

已用时间: 16.701(毫秒). 执行号:158339.
SQL> insert into test values ('as',2);
影响行数 1

已用时间: 2.408(毫秒). 执行号:158341.
SQL> insert into Test values ('AS',3);
影响行数 1

已用时间: 0.581(毫秒). 执行号:158343.
SQL> insert into Test values ('as',3);
影响行数 1

已用时间: 10.780(毫秒). 执行号:158345.
SQL> insert into "Test" values ('AS',3);
影响行数 1

已用时间: 8.207(毫秒). 执行号:158347.
SQL> insert into "Test" values ('as',3);
影响行数 1

已用时间: 10.200(毫秒). 执行号:158349.
  • DBA_OBJECTS记录
SQL> select object_name from dba_objects where object_name like '%es%' and owner = 'SYSDBA';

行号     OBJECT_NAME
---------- -----------
1          Test

SQL> select object_name from dba_objects where object_name like '%ES%' and owner = 'SYSDBA';

行号     OBJECT_NAME                       
---------- ----------------------------------
1          TESTSS
2          TESTS
3          TEST
  • 查询结果
SQL> select * from test;

行号     A1 A2
---------- -- --
1          AS 1
2          as 2
3          as 3
4          AS 3

已用时间: 8.259(毫秒). 执行号:158351.
SQL> select * from TEST;

行号     A1 A2
---------- -- --
1          AS 1
2          as 2
3          as 3
4          AS 3

已用时间: 12.687(毫秒). 执行号:158353.
SQL> select * from "Test";

行号     A1 A2
---------- -- --
1          AS 3
2          as 3

  • 结论
1,记录到数据库系统视图dba_objects中的对象名如果没有使用双引号固定大小写,则会以大写新式记录到库中
2,对于DDL、DML语句,不区分对象字符大小写
3,对于需要区分大小写的对象,还需要对对象名加上双引号

大小写不敏感

  • 参数值校验
[dmdba@MPP2 ~]$ disql sysdba/dmdba123456@127.0.0.1:4567

服务器[127.0.0.1:4567]:处于普通打开状态
登录使用时间 : 27.136(ms)
disql V8
SQL> select case_sensitive();

行号     CASE_SENSITIVE()
---------- ----------------
1          0
  • 准备测试数据
SQL> create table test (a1 varchar,a2 number);
操作已执行
已用时间: 2.911(毫秒). 执行号:66764.

SQL> create table Test (a1 varchar,a2 number);
create table Test (a1 varchar,a2 number);
第1 行附近出现错误[-2124]:对象[test]已存在.
已用时间: 0.448(毫秒). 执行号:0.

SQL> create table "Test" (a1 varchar,a2 number);
create table "Test" (a1 varchar,a2 number);
第1 行附近出现错误[-2124]:对象[test]已存在.
已用时间: 0.185(毫秒). 执行号:0.

SQL> create table Tests (a1 varchar,a2 number);
操作已执行
已用时间: 4.099(毫秒). 执行号:66793.
SQL> create table TESTSS (a1 varchar,a2 number);
操作已执行
已用时间: 3.342(毫秒). 执行号:66794.

SQL> insert into test values ('AS',1);
影响行数 1

已用时间: 0.297(毫秒). 执行号:66784.
SQL> insert into test values ('as',2);
影响行数 1

已用时间: 0.653(毫秒). 执行号:66785.
SQL> insert into Test values ('AS',3);
影响行数 1

已用时间: 0.403(毫秒). 执行号:66786.
SQL> insert into Test values ('as',3);
影响行数 1

已用时间: 0.428(毫秒). 执行号:66787.
SQL> insert into "Test" values ('AS',3);
影响行数 1

已用时间: 0.382(毫秒). 执行号:66788.
SQL> insert into "Test" values ('as',3);
影响行数 1

已用时间: 0.336(毫秒). 执行号:66789.

  • DBA_OBJECTS记录
SQL> select object_name from dba_objects where object_name like '%es%' and owner = 'SYSDBA';

行号     object_name                       
---------- ----------------------------------
1          test
2          Tests
3          TESTSS


SQL> select object_name from dba_objects where object_name like '%ES%' and owner = 'SYSDBA';

行号     object_name                       
---------- ----------------------------------
1          test
2          Tests
3          TESTSS
  • 查询结果
SQL> select * from test;

行号     a1 a2
---------- -- --
1          AS 1
2          as 2
3          AS 3
4          as 3
5          AS 3
6          as 3

6 rows got

已用时间: 0.214(毫秒). 执行号:66790.
SQL> select * from TEST;

行号     a1 a2
---------- -- --
1          AS 1
2          as 2
3          AS 3
4          as 3
5          AS 3
6          as 3

6 rows got

已用时间: 0.403(毫秒). 执行号:66791.
SQL> select * from "Test";

行号     a1 a2
---------- -- --
1          AS 1
2          as 2
3          AS 3
4          as 3
5          AS 3
6          as 3

6 rows got

已用时间: 0.480(毫秒). 执行号:66792.
  • 结论
1,记录到数据库系统视图dba_objects中的对象名与创建数据语句字符完全一致
2,对于DDL语句,不区分对象字符大小写
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服