• CASE_SENSITIVE参数的作用

1、定义

大小写敏感设置下,模式名、对象名、表名、字段名,默认小写会转为大写,除非双引号括起来表示小写,对于查询条件中是区分大小写字符的,查询结果也是区分大小写字符的。而大小写不敏感设置下,模式名、对象名、表名、字段名大小写会自动区分,不用单独加双引号表示小写,查询添加中不区分大小写字符,查询结果也不区分大小写字符。此参数是一个只读参数,只有初始化实例时才能指定。

  1. 数据库参数设置查看
  1. 通过select case_sensitive()查看。

为1表示大小写敏感,为0表示大小写不敏感。

  1. 通过SELECT SF_GET_CASE_SENSITIVE_FLAG()查看

  1. 通过dm.ini配置文件确定

  1. 数据操作区别
  1. 对于大小写敏感的数据库,查询数据字典表中数据都需要用大写。例如:

而如果把表名修改为小写是查询不到数据的:

  1. 对于大小写名字不敏感的库,使用大写写都能差查到,例如:、

  1. 测试表中插入不同大小写数据测试

对于大小写敏感的库,查询出来的结果是区分大小写的。

对于大小不敏感的库,查询出来的结果是不分大小写的

  • CHARSET,LENGTH_IN_CHAR
  1. 参数解释

   LENGTH_IN_CHAR是初始化数据库时一个参数,数据库创建后不能修改,需要建库的时候考虑好,此参数决定了数据库中的VARCHAR类型对象的长度是否以字符为单位。取值为1或者Y则设置为以字符为单位,将存储长度值按照理论字符长度进行放大。取值为0或者N则所有 VARCHAR 类型对象的长度以字节为单位不管如何定义,实际能插入的字符串占用总字节长度仍然不能超过 8188的上限。

CHARSET 字符集选项。 取值:0代表GB18030,1代表UTF-8,2代表韩文字符集 EUC-KR。默认为 0。

  1. 查询参数

  1)、charset查询

select sf_get_unicode_flag();

select unicode();

select * from v$dm_ini a where a.para_name like '%charset%';

  1. 、length_in_char查询

    select sf_get_length_in_char();

select * from v$dm_ini a where a.para_name like '%length_in_char%';

  1. 常见的四种组合

1).CHARSET=0,LENGTH_IN_CHAR=0

这是初始化数据库时的默认配置,字符集为gb18030,varchar长度以字节为单位,汉字一般需要占用两个字节

2).CHARSET=1,LENGTH_IN_CHAR=0

字符集为UTF-8,varchar长度以字节为单位,汉字一般占据三个字节

3).CHARSET=0,LENGTH_IN_CHAR=1

字符集为GB18030,在length_in_char=1的情况下,varchar按字符来计数,varchar的实际可存储字节数会按2倍的比例放大,例如定义varchar(10),那么就可以存储10 * 2 = 20个字节的数据

4).CHARSET=1,LENGTH_IN_CHAR=1

字符集为UTF-8,varchar长度以字符为单位,varchar的实际存储字节数会按4倍的比例放大,例如定义varchar(10),那么就可以存储10 * 4 = 40个字节的数据

  • CHARSET,LENGTH_IN_CHAR案例测试

   create table test(c1 varchar(10));

  1. UNICODE_FLAG=0,LENGTH_IN_CHAR=0

插入10个英文,正常

insert into test(c1) values('ABCDEFGHIJ');

插入11个英文,错误

insert into test(c1) values('ABCDEFGHIJA');

     

插入5个中文,正常

insert into test(c1) values('测试一下测');

插入6个中文,错误

insert into test(c1) values('测试一下测试');

 2、UNICODE_FLAG=0,LENGTH_IN_CHAR=1

--插入10个英文,正常

insert into test(c1) values('ABCDEFGHIJ');

--插入11个英文,正常

insert into test(c1) values('ABCDEFGHIJA');

--插入20个英文,正常

insert into test(c1) values('ABCDEFGHIJABCDEFGHIJ');

--插入21个英文,错误

insert into test(c1) values('ABCDEFGHIJABCDEFGHIJA');

​--插入10个中文,正常

insert into test(c1) values('测试一下测试一下测试');

--插入11个中文,错误

insert into test(c1) values('测试一下测试一下测试一');

--插入10个中文1个英文,错误

insert into test(c1) values('测试一下测试一下测试A');

3、UNICODE_FLAG=1,LENGTH_IN_CHAR=0

--插入10个英文,正常

insert into test(c1) values('ABCDEFGHIJ');

--插入11个英文,错误

insert into test(c1) values('ABCDEFGHIJA');

​--插入5个中文,正常

insert into test(c1) values('测试一');

--插入5个中文1个英文,正常

insert into test(c1) values('测试一A');

--插入6个中文,错误

insert into test(c1) values('测试一下');

--插入5个中文2个英文,错误

insert into test(c1) values('测试一AB');

  1. UNICODE_FLAG=1,LENGTH_IN_CHAR=1

   

--插入10个英文,正常

insert into test(c1) values('ABCDEFGHIJ');

--插入20个英文,正常

insert into test(c1) values('ABCDEFGHIJABCDEFGHIJ');

--插入40个英文,正常

insert into test(c1) values('ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ');

--插入41个英文,错误

insert into test(c1) values('ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJA');

​--插入10个中文,正常,中文占3个字节

insert into test(c1) values('测试一下测试一下测试');

--插入13个中文,正常

insert into test(c1) values('测试一下测试一下测试一下测');

--插入14个中文,错误

insert into test(c1) values('测试一下测试一下测试一下测试');

--插入13个中文1个英文,正常

insert into test(c1) values('测试一下测试一下测试一下测A');

--插入13个中文2个英文,错误

insert into test(c1) values('测试一下测试一下测试一下测AB');

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

Logo

一站式 AI 云服务平台

更多推荐