SQL 语句
Data Type
查看数据所占空间的两个函数:
-- 查看所占字节数
select length('你好,世界') from dual;
-- 查看所占字符数,即多少个字母,多少个汉字
select lengthb('您好,美女') from dual;
-- 比如
create table aaa (a varchar2(6));
insert into aaa values ('aaa');
insert into aaa values ('你好');
select a, length(a), lengthb(a) from aaa;
字符类型
- char,固定长度,默认1,最大2000,如果长度不够,用空格填充。
- varchar2 类型,变长字符串,最多4000字节长度。
- nvarchar2,跟上面比,增加了字符集的支持。
- long,用于存储大数据,最多 2G。不建议使用,已被 clob 类型替代。
-- 它的使用跟 SQL 的标准 varchar 基本类似, -- 但是,在 Oracle 中请使用 varchar2 而不是 varchar, -- varchar2 的效率更高,并且在兼容性上做的更好 -- 初始化的语句为: name varchar2(20) -- 其中 20 代表最大长度, 默认单位是字节。 -- 如果定义为: name varchar2(20 char),表示最大保存20个字符长度的字符串。 create table aaa ( a varchar2(20), -- 最大是20个字节长度,默认单位字节 b varchar2(20 byte), -- 最大为20个字节长度,跟上面是一样的 c varchar2(20 char) -- 最大为20个字符长度 ); -- varchar2 最大能保存 4000 个字节 -- 如果是英文,则是 4000 个英文字母 -- 如果是中文,需要按照字符集判断: -- GBK 用两个字节表示一个汉字,所以 varchar2 最多表示 2000 个汉字 -- UTF-8 是变长字符集,用一个字节表示一个英文字母,用3个或4个字节表示一个汉字,所以,最多可以保持1333个汉字。 select length('你好') from dual; -- 2 select lengthb('你好') from dual; -- 4 -- char 类型是固定长度的,可能会占用更多空间。但是因为长度固定,块的分配管理比较块,效率很高。 -- varchar2 是变长的,会占用尽量少的空间。但是需要消耗更多资源为分配变长空间,效率略低。 -- 所以,用哪一种,酌情而定。 -- nchar/nvarchar2 是 char/varchar2 的字符集支持版本,对多字节字符有算法上的优化。 -- 感觉用的比较少。
数值类型
- number,占用 38 位,有自己的内部表示方式,可以表示天文数字。
- int/float,number 类型的子类型
-- number 类型的语法为 NUMBER [位数[,小数点数]] create table bbb ( a number, -- 一共 38 位,其他按照插入的值自动判断 b number(5), -- 一共5位 c number(5, 2), -- 一共5位,3位整数,2位小数 d number (*, 2) -- 保存两位小数,其他随意 e number (*, 0), -- 相当于 int f int ); -- 插入的时候,多余的小数会被切掉,但如果整数位超了,会报错 insert into bbb values (111.223, 111.223, 111.223, 111.223, 22); -- 一般情况下,作为表的主键,设为 int 类型就可以了
日期类型
- date,存储的年月日,时分秒
- timestamp,存储的更详细,包括时区,还有精确到小数点后6位的秒数等
- timestamp with time zone,可以设置时区
- sysdate/systimestamp 连个函数用来查询当