char:使用数据库字符集来存储数据,长度固定,如
果存储的数据没有达到指定长度,自动补足空格
。指定长度时,默认长度的计量单位由NLS_LENGTH_SEMANTICS(默认为字节byte)参数决定,但是我们可以手动指定为char或者byte。oracle建议使用NLS_LENGTH_SEMANTICS来指定计量单位,这样可以提高效率。char类型的最大存储长度为2000个字节,在plsql中,最大存储长度可以达到32767个字节。使用char时,
可以不指定最大长度,此时最大长度为1.
nchar:使用国家字符集来存储数据,长度固定,如果
存储的数据没有达到指定长度,数据库自动补足空格
。指定长度时,
采用char为计量单位
,不可以手动指定其他单位。最大存储长度为2000个字节,在plsql中,其最大存储长度可以达到32767个字节。使用nchar时,可以不指定最大长度,此时最大长度为1.
varchar2: 使用数据库字符集存储数据,
长度可变,如果存储数据没有达到指定长度,不自动补足空格
。可使用char,byte为计量单位,默认受参数NLS_LENGTH_SEMANTICS的影响。最大存储长度为4000个字节,在plsql中,存储长度可达32767个字节。
必须指定最大长度,长度最小值为1
nvarchar2:使用国家字符集来存储数据,长度可变,如果存储的数据没有达到指定长度,不自动补足空格。指定长度时,
采用char为计量单位
,不可以手动指定其他单位。最大存储长度为4000个字节,在plsql中,其最大存储长度可以达到32767个字节。必须指定最大长度,长度最小值为1.
varchar:oracle目前并没有实现该数据类型,当前版本下,varchar与varchar2完全一致,但不保证将来不会单独设计varchar。
下面我们只讨论char和varchar2的区别,至于nchar nvarchar2 varchar,我相信聪明的同仁们肯定可以触类旁通。
1:char 与varchar2在存储上的区别,仅仅在于char会使用空格来填充空间,由于varchar2采用变长的方式存储数据,因此可以节省空间,这是毋庸置疑的。
2:在效率方面,varchar2和char在某些情况下,各有优劣,并没有实质上的差别。
3:在字符比较上的差别,是char和varchar2的主要差别。当两个字符串进行比较时,如果其中任何一个字符串为varchar2类型(文本串作为char类型来处理),那么两个字符串直接进行比较;
如果不存在varchar2类型的字符串,在比较之前,会将其中较短的字符串末尾补充空格至与较长字符串长度一致,然后进行字符的比对。
从上面的代码可以看出,由于char的自动补足,以及char和char类型比较时的自动长度对齐,使得字符串数据的处理显得难以捉摸。当然,我们可以使用trim或者rpad函数来进行字符串的处理,但是这往往
会导致索引的失效
4:char类型数据可能造成数据信息的丢失,例如,我们赋值”aaa " 给变量B char(10),当B接收的变量时,其存储内容为"aaa ",此时,我们无处指定赋值给B的原始值是否包含空格以及包含多少空格。
5:在plsql程序中,在编译时刻,oracle会为char类型分配指定最大长度的内存;对于
varchar2类型,如果最大长度没有超过4000,则在编译时,分配指定最大长度的内存;如果长度超过或者等于4000,oracle会在运行时刻分配符合实际值大小的内存
结论:使用varchar2数据类型作为字符串的首选类型,即便是在处理”男“,”女“这样的性别数据时,使用char类型也不比varchar2类型显得有优势。
1.
char
的最大
长度
一直记得
char
的最大
长度
是255字节,
varchar
2是4000字节,结果今天看
oracle
9i的SQL Reference,发现错了,
char
的最大
长度
是2000。 想想原因,可能是和informix的
char
和
varchar
长度
记混了。informix里面
varchar
是255,
char
的最大是32767,但是实际上和整行大小有关系,整行大小不能超过32767,
你可以指定日期格式模型来控制日期的显示方式,例如显示日期、时间、时区等。此外,你还可以使用NLS_DATE_FORMAT参数来设置默认的日期格式,这样在使用TO_
CHAR
函数时就不需要指定格式模型了。在使用TO_
CHAR
函数时,你可以通过指定不同的格式模型来控制转换后的
字符
串的显示方式。在
Oracle
数据库
中,使用TO_
CHAR
函数将日期
类型
转换为
字符
串时,可以使用多种日期格式模型(date format models)。请注意,TO_
CHAR
函数中的日期格式模型是区分大小写的。
varchar
是
长度
不固定的,比如说,你定义了
varchar
(20),当你插入abc,则在
数据库
中只占3个字节。
varchar
同样区分中英文,这点同
char
。
varchar
2基本上等同于
varchar
,它是
oracle
自己定义的一个非工业标准
varchar
,不同在于,
varchar
2用null代替
varchar
的"ht...
VARCHAR
2和N
VARCHAR
2在
数据库
中都用于
存
储变长
字符
数据,但两者在
存
储方式和
字符
长度
上
存
在一些不同。综上所述,
VARCHAR
2和N
VARCHAR
2的主要区别在于
存
储方式、
字符
长度
和
字符
集编码。需要根据具体应用场景和数据特点选择合适的
类型
来
存
储数据。
CHAR
与N
CHAR
在
Oracle
数据库
是常用的
类型
,不过两种数据
类型
是互相不兼容的,这里大概简要谈一下这2种数据
类型
吧。在
Oracle
中,
CHAR
类型
是一种固定
长度
的
字符
串
类型
,最大
长度
是2000个byte,在这里要注意了,是2000个byte,并不是2000个
字符
的意思。1个
字符
在
Oracle
中可能是1个byte到4个byte不等,这个要看
数据库
的设置了。这个是
数据库
中有一个参数NLS_LEN...
char
的
长度
是固定的,在
存
储中比如
存
储“abc”,
char
(6),实际在库中
存
储的是“abc ”
varchar
长度
是可变的,还是以上例子,在库中
存
储的就是“abc”
2.
varchar
和
varchar
2 的区别
varchar
存
储汉字2个字节,英文一个字节,
存
储空用空
字符
串表示
varchar
2
存
储任何
字符
都按照两个字...
Oracle
中N
VARCHAR
2和
VARCHAR
2的区别 :
从使用角度来看区别在于:N
VARCHAR
2在计算
长度
时和
字符
集相关的,例如
数据库
是中文
字符
集时以
长度
10为例,
1、N
VARCHAR
2(10)是可以
存
进去10个汉字的,如果用来
存
英文也只能
存
10个
字符
。
2、而
VARCHAR
2(10)的话,则只能
存
进5个汉字,英文则可以
存
10个
CHAR
固定
长度
字符
域,最大
长度
可达2
不论在表段还是索引段中,
CHAR
都会占用最大的
存
储空间,这就够糟糕了,避免使用
CHAR
/N
CHAR
类型
还有另外一个很重要的原因:
CHAR
/N
CHAR
类型
还会给使用这些数据的应用带来混乱,原因与
字符
串的比较的规则有关,也与执行
字符
串比较多严格程度有关。使用诸如UTF-8的多字节
字符
集时,建议在
VARCHAR
2/
CHAR
定义中使用
CHAR
修饰符,也就是说使用
VARCHAR
2(80
CHAR
),而不是
VARCHAR
2(80),因为是要定义一个实际上能
存
储80
字符
数据的列。