您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > Oracle数据类型.
freeprogman@qq.comOracle数据类型数据库字符集和国家字符集○在创建数据库时,可以指定数据库字符集和国家字符集。○数据库字符集○数据库字符集在创建数据库后通常不能更改。○用来存储CHAR,VARCHAR2,CLOB等类型数据;标示诸如表名、列名以及PL/SQL变量;存储SQL和PL/SQL程序单元○字符集有7位ASCII码、EBCDIC码、和utf-8○国家字符集○用以存储NCHAR,NVARCHAR2,NCLOB等类型数据○国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR可以提供多字节编码的支持,而数据库字符集则不能。国家字符集只能在unicode编码中的AF16UTF16和UTF8中选择,默认值是AF16UTF16查询字符集○可以查询以下数据字典或视图查看字符集设置情况○nls_database_parameters、props$、v$nls_parameters○SELECT*FROMnls_database_parametersWHEREparameterlike'%CHARACTERSET%'•NLS_CHARACTERSET表示字符集(NLS即NationalLanguageSupport)•NLS_NCHAR_CHARACTERSET表示国家字符集○修改数据库字符集○如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTERDATABASECHARACTERSET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集。国家字符集AL16UTF16与UTF-8区别○AL16UFT16○宽度固定,双字节Unicode字符集,执行速度快;○UTF8○宽度可变,1至3个字节的Unicode字符集○欧洲字符○在UTF8中按一至两个字节存储,使用UTF8可以节省空间○亚洲字符○在UTF8中按三个字节存储,使用AL16UTF16中更节省空间客户端字符集○客户端字符集定义了客户端字符数据的编码方式,任何发出或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过NLS_LANG参数设定。○如果使用EXP/IMP进行数据库的导出/导入,不仅要注意两服务器端之间的字符集的兼容性,而且要考虑到导出/导入过程中,服务器端与客户端之间的字符集的兼容性,特别是导出的时候。数据类型概览Oracle数据类型○Oracle内建的数据类型○字符数据类型○数字数据类型○日期时间数据类型○ROWID数据类型○RAW○大对象(LOB)○集合Collection○PL/SQL具有用于常量和变量的数据类型,包括布尔、引用类型、复合类型(记录)、用户定义类型VARCHAR2和CHAR○VARCHAR2○VARCHAR2(30)长度语义取决于会话参数NLS_LENGTH_SEMANTICS,该参数默认值是以字节作为长度语义。表示存储不超过30个字节的字符串,如果超出最大长度,数据库将返回一个错误。默认长度是1,最长不超过4000字节或4000字符○VARCHAR2(10CHAR)表示10个字符○VARCHAR2(10BYTE)表示10个字节○使用非填充比较语义来比较VARCHAR2值○为什么称为VARCHAR2而不是VARCHAR?○CHAR○固定长度字符串,使用空格填充○默认长度是1,最长不超过2000字节○使用空白填充比较语义来比较CHAR值NCHAR和NVARCHAR2数据类型○NCHAR和NVARCHAR2存储对应于国家字符集的字符串,数据类型的字符集必须是AL16UTF16或UTF8○NCHAR最大为2000字节○不能把NCHAR类型数据插入到CHAR列,反之亦然○NVARCHAR2最大为4000字节○SELECT*FROMproductWHEREname=N'LCDMonitor11/PM';○N现在可有可无NUMBER数据类型○不同操作系统之间可移植。存储数值推荐使用NUMBER○能表达0和绝对值在[1.0x10-130,1.0x10126)的数据。○每个NUMBER值占用1-22个字节。○一般形式:NUMBER(p,s)○精度Precision:指定有效十进制数字的最大长度,1=p=38,有效位是从左边第一个不为0的数算起的位数。○小数位数Scale:指从十进制的小数点到最小有效数字的位数。正小数位数从小数点向右计数直至最小有效位。负小数位数从小数点向左计数直至(但不包括)最小有效数字。-84=s=127。NUMBER数据类型○NUMBER(p,s)○s0,表示精确到小数点右边s位,并四舍五入。然后检验有效位是否=p。○s0,表示精确到小数点左边s位,并四舍五入。然后检验有效位是否=p+|s|。○s=0,表示整数。NUMBER表示具有最大取值范围的数值。○小数位告诉系统保留多少位小数,从哪里开始舍入。精度舍入后,从舍入的位置开始,数值中允许有多少位。○随着有效数字的增加,NUMBER类型需要越来越多的存储空间。每增加两位有效数字,就需要另外一个字节的存储空间。Oracle存储一个数时,会存储有效数字、用户指定小数点位置的一个指数,以及有关数值符号的信息NUMBER数据类型ActualDataSpecifiedAsStoredAs123.89NUMBER123.89123.89NUMBER(3)124123.89NUMBER(3,2)exceedsprecision123.89NUMBER(4,2)exceedsprecision123.89NUMBER(5,2)123.89123.89NUMBER(6,1)123.9123.89NUMBER(6,-2)100.01234NUMBER(4,5).01234.00012NUMBER(4,5).00012.000127NUMBER(4,5).00013.0000012NUMBER(2,7).0000012.00000123NUMBER(2,7).00000121.2e-4NUMBER(2,5)0.000121.2e-5NUMBER(2,5)0.00001NUMBER数据类型123.2564NUMBER123.25641234.9876NUMBER(6,2)1234.9912345.12345NUMBER(6,2)Error(有效位为5+26)1234.9876NUMBER(6)1235(s没有表示s=0)12345.345NUMBER(5,-2)123001234567NUMBER(5,-2)123460012345678NUMBER(5,-2)Error(有效位为87)123456789NUMBER(5,-4)1234600001234567890NUMBER(5,-4)Error(有效位为109)12345.58NUMBER(*,1)12345.60.1NUMBER(4,5)Error(0.10000,有效位为54)0.01234567NUMBER(4,5)0.012350.09999NUMBER(4,5)0.09999数值类型○判断:向num_col插入1234,Oracle是否会报错?○会数值1234.00的总位数超过了5位。指定小数位数为2时,小数点左边最多只能有3位,右边有两位。因此,1234超过了定义的精度。NUMBER(5,2)列的存储范围是-999.99~999.99CREATETABLET(num_colNUMBER(5,2));数值类型○判断:向num_col插入1234567,Oracle是否会报错?○不会精度指示了舍入后数值允许有多少位,并使用小数位数来确定如何舍入CREATETABLET(num_colNUMBER(5,-2))浮点数(BINARY_FLOAT,BINARY_DOUBLE)○BINARY_FLOAT和BINARY_DOUBLE使用二进制精度,可以使算术计算更快并且通常可以降低存储需求。○BINARY_FLOAT和BINARY_DOUBLE是近似数字数据类型。它们存储十进制的值的近似表示,而不是精确的表示形式。例如值0.1不能用BINARY_DOUBLE或BINARY_FLOAT完全精确地表示。他们经常用于科学计算。数值类型特殊值描述BINARY_FLOAT_NAN非BINARY_FLOAT类型的数字(NaN)BINARY_FLOAT_INFINITYBINARY_FLOAT类型的无穷大(INF)BINARY_DOUBLE_NAN非BINARY_DOUBLE类型的数字(NaN)BINARY_DOUBLE_INFINITYBINARY_DOUBLE类型的无穷大(INF)其他数值类型NUMBERNUMERIC(p,s)DECIMAL(p,s)DEC(p,s)INTEGERINTSMALLINTFLOAT(b)DOUBLEPRECISIONREALANSIDatatypesConvertedtoOracleDatatypesNUMERIC(p,s)NUMBER(p,s)DECIMAL(p,s)INTEGERNUMBER(38)INTSMALLINTFLOAT(b)NUMBERDOUBLEPRECISIONREALRAW○RAW与CHAR和VARCHAR2相比。RAW属于变长度的二进制二进制串。在对CHAR和VARCHAR2类型进行存储时,会进行字符集转换。而对二进制数据进行存储则不会进行字符集转换。存储最多2000字节的二进制数据。○raw并不是以字符的方式存储。它是把插入的字符认为是16进制的值。向raw列插入数据时会发生一个隐式转换HEXTORAW,从raw列读取数据时会发生一个隐式转换RAWTOHEX。RAW类型示例○判断:对于仅包含一个16字节长RAW类型的表T,通过SQL*Plus,Oracle会如何处理如下所示的命令?能成功执行插入字符‘abcdef’么?○INSERTINTOTVALUES(‘abcdef’);//可执行○会成功执行插入操作,但是插入的数据并不是字符串‘abcdef’,而是一个3字节的RAW数据。○INSERTINTOTVALUES(‘abcdefgh’);//Error○错误信息为”invalidhexnumber”日期时间数据类型○DATE○TIMESTAMP[(fractional_seconds_precision)]○TIMESTAMP[(fractional_seconds_precision)]WITHTIMEZONE○TIMESTAMP[(fractional_seconds_precision)]WITHLOCALTIMEZONE○INTERVALYEAR[(year_precision)]TOMONTH○INTERVALDAY[(day_precision)]TOSECOND[(fractional_seconds_precision)]DATE数据类型○日期的固定长度共7个字节,分别对应世纪、年、月、日、小时、分、和秒。数据库将日期存储为数字,完全支持算术操作。○数据库根据指定的格式模型显示日期。标准的日期格式是DD-MON-RR,形如01-JAN-09。○RR类似于YY(年的最后两位数),但返回值的世纪值会因指定的两位年份及本年度的最后两位不同而不同。假设在1999年,数据库显示为01-JAN-09。如果日期格式使用RR,那么09指的是2009,而如果格式使用YY,那么09指的是1909。您可以更改实例或会话级别的默认日期格式。DATE数据类型○Oracle数据库以24小时制格式存储时间——HH:MI:SS。如果不输入的任何时间部分,那么默认情况下,日期字段中的时间是凌晨00:00:00,如果只输入了时间,则日期部分默认为当月的第一天。DATE数据类型○对Date字
本文标题:Oracle数据类型.
链接地址:https://www.777doc.com/doc-2847929 .html