Oracle中存储字符常用的数据类型有char和varchar2
其中
char 是定长,最小为1,最大为2000
varchar2 是变长,最小为1,最大为4000
在使用过程中,常见的定义
col char(n) --字节存储的默认形式
col char(n byte) --字节存储
col char(n char) --字符存储
col varchar2(n) --字节存储的默认形式
col varchar2(n byte) --字节存储
col varchar2(n char) --字符存储
字节存储表示最长能 存储n个字节 的字符串。
字符存储表示最长能 存储n个字符 的字符串。
例:
创建表t_char
create table t_char
(col_a char(5)
,col_b char(5 char)
);
插入记录
SQL> insert into t_char values ('aaaa','aaaa');
1 row inserted
查看表两个字段的字节长度和字符长度
SQL> select length(col_a),length(col_b) from t_char;
LENGTH(COL_A) LENGTH(COL_B)
------------- -------------
5 5
SQL> select lengthb(col_a),lengthb(col_b) from t_char;
LENGTHB(COL_A) LENGTHB(COL_B)
-------------- --------------
5 5
char是定长,所以占用的字节和字符一定是固定的。
插入第二条记录
SQL> insert into t_char values ('bbb11','bbb11');
1 row inserted
由于使用的是字母和数字组合的值,即满足5个字节又满足5个字符,能插入,看不出两个字段的区别。
下面使用中文,如果值为'数据库',会出现什么情况?
insert into t_char values ('数据库','数据库')
ORA-12899: 列 "SCOTT"."T_CHAR"."COL_A" 的值太大 (实际值: 6, 最大值: 5)
报错!col_a char(5) 字节长度最大为5,三个中文字符6字节超长。
所以col_a char(5) 字节长度定义 与 col_b char(5 char) 字符长度定义的区别如下
SQL> insert into t_char values ('数据1','我爱数据库');
1 row inserted
查看插入值的字符长度
SQL> select length('数据1'),length('我爱数据库') from dual;
LENGTH('数据1') LENGTH('我爱数据库')
--------------- --------------------
3 5
查看插入值的字节长度
SQL> select lengthb('数据1'),lengthb('我爱数据库') from dual;
LENGTHB('数据1') LENGTHB('我爱数据库')
---------------- ---------------------
5 10
col_b char(5 char)表示最长能存储5个字符,包括中文字符,如果5个字符都是中文字符,字节长度占10个字节(字符集GBK)
varchar类型的定义也是类似的,不再赘述
其中
char 是定长,最小为1,最大为2000
varchar2 是变长,最小为1,最大为4000
在使用过程中,常见的定义
col char(n) --字节存储的默认形式
col char(n byte) --字节存储
col char(n char) --字符存储
col varchar2(n) --字节存储的默认形式
col varchar2(n byte) --字节存储
col varchar2(n char) --字符存储
字节存储表示最长能 存储n个字节 的字符串。
字符存储表示最长能 存储n个字符 的字符串。
例:
创建表t_char
create table t_char
(col_a char(5)
,col_b char(5 char)
);
插入记录
SQL> insert into t_char values ('aaaa','aaaa');
1 row inserted
查看表两个字段的字节长度和字符长度
SQL> select length(col_a),length(col_b) from t_char;
LENGTH(COL_A) LENGTH(COL_B)
------------- -------------
5 5
SQL> select lengthb(col_a),lengthb(col_b) from t_char;
LENGTHB(COL_A) LENGTHB(COL_B)
-------------- --------------
5 5
char是定长,所以占用的字节和字符一定是固定的。
插入第二条记录
SQL> insert into t_char values ('bbb11','bbb11');
1 row inserted
由于使用的是字母和数字组合的值,即满足5个字节又满足5个字符,能插入,看不出两个字段的区别。
下面使用中文,如果值为'数据库',会出现什么情况?
insert into t_char values ('数据库','数据库')
ORA-12899: 列 "SCOTT"."T_CHAR"."COL_A" 的值太大 (实际值: 6, 最大值: 5)
报错!col_a char(5) 字节长度最大为5,三个中文字符6字节超长。
所以col_a char(5) 字节长度定义 与 col_b char(5 char) 字符长度定义的区别如下
SQL> insert into t_char values ('数据1','我爱数据库');
1 row inserted
查看插入值的字符长度
SQL> select length('数据1'),length('我爱数据库') from dual;
LENGTH('数据1') LENGTH('我爱数据库')
--------------- --------------------
3 5
查看插入值的字节长度
SQL> select lengthb('数据1'),lengthb('我爱数据库') from dual;
LENGTHB('数据1') LENGTHB('我爱数据库')
---------------- ---------------------
5 10
col_b char(5 char)表示最长能存储5个字符,包括中文字符,如果5个字符都是中文字符,字节长度占10个字节(字符集GBK)
varchar类型的定义也是类似的,不再赘述
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28929558/viewspace-1169961/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28929558/viewspace-1169961/