达梦数据库CASE_SENSITIVE、LENGTH_IN_CHAR CHARSET、CHARSET三个参数解释

时间:2024-10-05 17:18:22

CASE_SENSITIVE
1、参数简介
大小写敏感只能在数据库初始化的时候设置,设置后不能更改,若要更改只有重新初始化。
大小写敏感针对三种情况:
1)对象名
2)字段内容
3)字符串值
CASE_SENSITIVE
值:
1/Y:值为1表示区分大小写
0/N:值为0表示不区分大小写
图像化安装在截图位置设置
在这里插入图片描述
dminit初始化 help查看参数使用方法
在这里插入图片描述
数据库启动后可以通过以下语句查看大小写如何设置
SELECT CASE_SENSITIVE();

2、案例测试
2.1 大小写敏感
创建表Abc
create table Abc(id int,ServerName varchar2(10));
在这里插入图片描述
可发现在配置大小写敏感的情况下,表名、列名全部被转化成大写存储。若要保持大小写不变存储,则需要给字段加" "。将不会转换为大写
插入包含大小写的数据测试字段值保持大小写存储。
在这里插入图片描述
执行语句
create table “Abc”(id int,ServerName varchar2(10)); --成功,双引号标注表以小写形式存储,不存在对象冲突
表名
select * from Abc; --成功
select * from ABC; --成功
select * from “Abc”; --失败
字段
select id from abc --成功
select “id” from abc --失败
字段内容
select * from abc where ServerName=‘’; --查询到数据
在这里插入图片描述

select * from abc where ServerName=‘’; --未查询到数据
2.2 大小写不敏感
create table Abc(id int,ServerName varchar2(10));
在这里插入图片描述
可看到表名、字段名均未发送大小写转换
create table ABC(id int,ServerName varchar2(10)); --失败,Object [Abc] already exists
不能再创建同名对象了
select * from Abc; --成功
select * from ABC; --成功
select * from “Abc”; --成功
select id from abc; --成功
由于不区分大小写,均能查询到
insert into Abc values(1,‘’);
select * from abc where ServerName=‘’; --查询到数据
select * from abc where ServerName=‘’; --查询到数据
3、结论
大小写敏感:
表名,字段名均转换为大写进程存储,加双引号不会进行大小写转换,在查询时,会将小写自动转换成大写进行查询,若加双引号不进行转换。字段值的存储跟输入的大小写保持一致,进行检索时也要跟输入大小写一致方可检索成功。可以创建大小写不一致的相同表、列等对象。

大小写不敏感:
表名,字段名存储安装创建时的大小写状态进行保存,即使大小写不一致也不允许相同的表名、字段名,对于字段值的检索大小写均可检索成功
LENGTH_IN_CHAR
1、参数简介
varchar类型的字段值以字符还是字节形式存储。比如varchar(10),字符集gb18030情况下,一个中文占两个字节。若以字符形式存储则能存10个中文字符,若以字节形式存储则能5个中文字符
1/Y:字符形式存储
0/N:字节形式存储,默认是0
2、案例测试
2.1、LENGTH_IN_CHAR=0(按字节存储)
创建字段类型为varchar(10)的表,然后分别插入10个、5个中文
create table info(id int,text varchar(10));
insert into info values(1,‘中华名字是伟大的民族’); --10个中文
在这里插入图片描述
insert into info values(1,‘中华民族是’); --5个中文
select * from info;
在这里插入图片描述

2.2、LENGTH_IN_CHAR=1
create table info(id int,text varchar(10));
insert into info values(1,‘中华名字是伟大的民族’); --10个中文
insert into info values(1,‘中华名字是伟大的民族哈哈’); --11个中文,Column [TEXT] out of length
insert into info values(1,‘aaaaaaaaaaaaaaaaaaaaaaa’); --21个英文 (一个英文占一个字节)olumn [TEXT] out of length

select * from info;
select length(text) from info; --10个字符
select lengthb(text) from info; --20个字节

3、结论
区分以字节形式存储还是以字符形式存储,但是不论是字节还是字符,占用的字节总长度不能超限。例如:varchar(10)以字符为单位存储,在gb18030字符集下不能存储总长度超过20个字节的内容,utf-8下不能存储总长度超过30个字节的内容。
CHARSET
1、参数简介
数据库字符集参数,简单理解就是字符的存储格式。达梦数据库有gb18303、utf-8、EUC-KR(韩文),主要区分就是数据库存放的长度。gb18030一个中文字符占用两个字节,utf-8一个中文字符占三个字节,英文一个字母占用一个字节。
参数值 0:gb18030 默认是0
1:utf-8
2: EUC-KR
select sf_get_unicode_flag(); --查看字符集类型
2、案列测试
charset=0
create table info(id int,text varchar(10));
insert into info values(1,‘中华名字是伟大的民族哈哈’); --11个中文,Column [TEXT] out of length
naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MTkyMjgw,size_16,color_FFFFFF,t_70)
insert into info values(1,‘aaaaaaaaaaaaaaaaaaaaaaa’); --21个英文 (一个英文占一个字节),out of length
在charset=0 LENGTH_IN_CHAR=1情况下字节长度扩充两倍

charset=1 LENGTH_IN_CHAR=1 情况下字节长度扩充四倍
在这里插入图片描述

3、结论
不同字符集占用的字节长度不同,采用不同形式数据库字符集,在字符形式下,所占用的字节长度不同,扩充精度也不同,均是针对varchar数据类型。

更多资讯请上达梦技术社区了解:/