CASE_SENSITIVE 标识符大小写敏感。
当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;
当大小写不敏感时,系统不会转换标识符的大小写,在标识符比较时也不能区分大小写。
取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y。可选参数。
设置大小写不敏感CASE_SENSITIVE=0
创建一个表:
create table test1
(
C1 int not null,
C2 varchar2(5)
);
查看dba_tables中表名为小写
select * from dba_tables where owner='SYSDBA';
insert into test1 values(1,'AAA');
insert into TEST1 values(2,'bbb');
两条语句均能执行成功
添加一个栏位alter table test1 add(c3 varchar2(5)); 栏位名使用小写
默认查询出的栏位名为小写,使用大写的栏位名依然可查询,再次添加一个大写的C3栏位会提示失败
select * from test1;
select * from TEST1;
select * from "Test1";
三条条查询语句均能成功
因不区分大小写,所以test1& TEST1&"Test1"是同一个对象
使用小写字段值依然能查出该数据:
SELECT * FROM TEST1 WHERE C3='a';
初始化数据库设置大小写敏感(默认) CASE_SENSITIVE=1
创建如下表栏位c3为小写
create table test1
(
C1 int not null,
C2 varchar2(5),
c3 varchar2(5)
);
查看表名为大写
select * from dba_tables where owner='SYSDBA';
insert into test1 values(1,'AAA','A');
insert into TEST1 values(2,'bbb','b');
如下语句执行失败
insert into "Test1" values(3,'ccc','c');
如下语句执行失败
insert into "Test1" values(3,'ccc','c');
执行查询语句,可看到默认返回的栏位名均为大写
select * from TEST1;
大小写敏感时:表名、字段名均转换为大写存储,小写需要使用双引号””括起
查询时不使用双引号的表名字段名都会自动转换为大写,字段值的存储跟输入一致
大小写不敏感时:表名,字段名,字段值均与输入时一致,大小写均可访问
-
字符集选项
CARSET/UNICODE_FLAG 字符集选项。
取值:0代表GB18030,1代表UTF-8,2代表韩文字符集EUC-KR。默认为0。可选参数。
与此同时,CHARSET/UNICODE_FLAG为0和CASE_SENSITIVE为N/n/0 不能同时出现。
LENGTH_IN_CHAR
VARCHAR 类型对象的长度是否以字符为单位。
取值:1、Y 表示是,0、N 表示否。默认值为 0。可选参数。
1 或 Y:是,所有 VARCHAR 类型对象的长度以字符为单位。这种情况下,定义长度并非 真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。同时,存储的字节长度 8188 上限 仍然不变,也就是说,即使定义列长度为 8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;
0 或 N:否,所有 VARCHAR 类型对象的长度以字节为单位
GB18030,CHARSET=0
一个汉字占用2个byte,一个英文占用1个byte
select BIT_LENGTH('一');
select BIT_LENGTH('a');
- LENGTH_IN_CHAR=0 VARCHAR 类型对象的长度以字节为单位
创建一个表:
create table test1
(
C1 int not null,
C2 varchar2(5),
c3 varchar2(5)
);
插入数据:
insert into test1 values(1,'AAA','一');
insert into TEST1 values(2,'bbb','二');
insert into TEST1 values(4,'dddddd','四四');
insert into TEST1 values(5,'eeee','五五五');
数据插入失败,以字节为单位,超过长度定义5 byte:
- LENGTH_IN_CHAR=1 VARCHAR 类型对象的长度以字符为单位
create table Test1
(
C1 int not null,
C2 varchar2(5),
c3 varchar2(5)
);
插入数据:
insert into test1 values(1,'AAA','一');
insert into TEST1 values(2,'bbb','二');
表示可存储5个中文长度的字符串,英文字符可存储10个,中文字符5个
超过此长度报错
insert into TEST1 values(5,'eeeeeeeeee','五五五'); C2 10个e成功
insert into TEST1 values(6,'ffffffffff','六六六六六');C3五个六成功
UTF-8,CHARSET=1
一个英文字符占用1个byte,一个中文字符占用3个byte
select BIT_LENGTH('一');
select BIT_LENGTH('a');
LENGTH_IN_CHAR=0 VARCHAR 类型对象的长度以字节为单位
创建一个表
create table Test1
(
C1 int not null,
C2 varchar2(5),
c3 varchar2(5)
);
insert into test1 values(1,'AAAAA','一一'); '一一'长度6byte
insert into TEST1 values(2,'bbbbbb','二'); 'bbbbbb'长度6byte
如下语句执行成功:
insert into test1 values(1,'AAAAA','一');
insert into TEST1 values(2,'bbbbb','二');
LENGTH_IN_CHAR=1 VARCHAR 类型对象的长度以字符为单位
创建如下表
create table Test1
(
C1 int not null,
C2 varchar2(3),
c3 varchar2(3)
);
varchar2(3)实际可存放中文字符3+1个即12byte
insert into test1 values(1,'AAAAAAAAAAAAA','一');
insert into TEST1 values(2,'bbbbbbbbbbbb','二二二二二');
如下语句可执行成功:
insert into test1 values(1,'AAAAAAAAAAAA','一');
insert into TEST1 values(2,'bbbbbbbbbbbb','二二二二');
EUC-KR,,CHARSET=2
一个中文字符 2 个 byte ,一个英文字符 1 个 byte
select BIT_LENGTH('一');
select BIT_LENGTH('a');
LENGTH_IN_CHAR=0 VARCHAR 类型对象的长度以字节为单位
创建如下表:
create table Test1
(
C1 int not null,
C2 varchar2(3),
c3 varchar2(3)
);
长度超过 3 byte,无法插入
insert into test1 values(1,'AAAA','一');
insert into TEST1 values(2,'bbb','二二');
执行如下语句成功插入
insert into test1 values(1,'AAA','一');
insert into TEST1 values(2,'bbb','二');
LENGTH_IN_CHAR=1 VARCHAR 类型对象的长度以字符为单位
创建表:
create table Test1
(
C1 int not null,
C2 varchar2(3),
c3 varchar2(3)
);
varchar2(3)表示3个字符,中文字符可以存储三个(6byte),英文字符可存储6个(6byte)
insert into test1 values(1,'AAAAAAA','一');
insert into TEST1 values(2,'bbbbbb','二二二二');
如下SQL成功执行:
insert into test1 values(1,'AAAAAA','一');
insert into TEST1 values(2,'bbbbbb','二二二');
CASE_SENSITIVE:
1大小写敏感时:表名、字段名均转换为大写存储,小写需要使用双引号””括起
查询时不使用双引号的表名字段名都会自动转换为大写,字段值的存储跟输入一致
0大小写不敏感时:表名,字段名,字段值均与输入时一致,大小写均可访问
CHARSET
0,GB18030:一个英文字符占用 1 byte,1 个中文字符占用 2 byte
1,UTF-8:一个英文字符占用 1 byte,1 个中文字符占用 3 byte
2,EUC-KR:一个英文字符占用 1 byte,1 个中文字符占用 2 byte
LENGTH_IN_CHAR决定varchar类型长度是以字节(0)还是字符(1)为单位