1.Character Data Types字符数据类型
1.1VARCHAR2(size [BYTE | CHAR])
可变长度字符串,具有最大长度size
字节或字符。 您必须为VARCHAR2
指定size
。 最小size
是1个字节或1个字符。 最大尺寸为:
- 32767 bytes or characters if
MAX_STRING_SIZE=EXTENDED
- 4000 bytes or characters if
MAX_STRING_SIZE=STANDARD
VARCHAR2数据类型指定数据库字符集中的可变长度字符串。您在创建数据库时指定数据库字符集。
使用VARCHAR2列创建表时,必须将列长度指定为大小,可选地后跟长度限定符。限定符BYTE表示字节长度语义,而限定符CHAR表示字符长度语义。在字节长度语义中,size是可以在列中存储的最大字节数。在字符长度语义中,size是数据库字符集中可以存储在列中的最大代码点数。代码点可以具有1到4个字节,具体取决于数据库字符集和代码点编码的特定字符。 Oracle建议您指定一个长度限定符以显式记录列的所需长度语义。如果未指定限定符,则创建列的会话的NLS_LENGTH_SEMANTICS参数的值将定义长度语义,除非该表属于模式SYS,在这种情况下,默认语义为BYTE。
Oracle完全按照您的指定将字符值存储在VARCHAR2列中,不带任何空白填充,前提是该值不超过列的长度。如果您尝试插入超过指定长度的值,则Oracle会返回错误。
BYTE
表示该列将具有字节长度语义。 CHAR
表示该列将具有字符语义。
1.2.NVARCHAR2(size)
具有最大长度大小字符的可变长度Unicode字符串。 您必须为NVARCHAR2指定大小。 对于AL16UTF16编码,字节数最多可以是两倍,对于UTF8编码,字节数最多可以是三倍。 最大大小由国家字符集定义决定,上限为:
- 32767 bytes if
MAX_STRING_SIZE = EXTENDED
- 4000 bytes if
MAX_STRING_SIZE = STANDARD
1.3.CHAR [(size [BYTE | CHAR])]
长度大小为字节或字符的定长字符数据。 最大大小为2000字节或字符。 默认和最小大小为1个字节。
CHAR数据类型指定数据库字符集中的固定长度字符串。 您在创建数据库时指定数据库字符集。
使用CHAR列创建表时,可以将列长度指定为大小,可选地后跟长度限定符。限定符BYTE表示字节长度语义,而限定符CHAR表示字符长度语义。在字节长度语义中,size是要存储在列中的字节数。在字符长度语义中,size是要存储在列中的数据库字符集中的代码点数。代码点可以具有1到4个字节,具体取决于数据库字符集和代码点编码的特定字符。 Oracle建议您指定一个长度限定符以显式记录列的所需长度语义。如果未指定限定符,则创建列的会话的NLS_LENGTH_SEMANTICS参数的值将定义长度语义,除非该表属于模式SYS,在这种情况下,默认语义为BYTE。
Oracle确保存储在CHAR列中的所有值都具有以所选长度语义中的size指定的长度。如果插入的值小于列长度,则Oracle会将值空白填充到列长度。如果您尝试为列插入一个太长的值,则Oracle会返回错误。请注意,如果列长度以字符(代码点)表示,则空白填充不保证所有列值具有相同的字节长度。
size的最大值是2000,这意味着2000个字节或字符(代码点),具体取决于所选的长度语义。但是,独立地,可以存储到CHAR列的任何字符值的绝对最大长度是2000个字节。例如,即使您将列长度定义为2000个字符,如果您尝试插入一个2000个字符的值(其中一个或多个代码点大于1个字节),Oracle也会返回错误。字符大小的值是长度约束,而不是保证容量。如果希望CHAR列始终能够在任何数据库字符集中存储大小字符,请使用大小小于或等于500的值。
BYTE和CHAR具有与VARCHAR2相同的语义。
1.4.NCHAR[(size)]
长度大小字符的定长字符数据。 对于AL16UTF16编码,字节数最多可以是两倍,对于UTF8编码,字节数最多可以是三倍。 最大大小由国家字符集定义决定,上限为2000字节。 默认和最小大小为1个字符。
2Numeric Data Type数字数据类型
2.1.NUMBER [ (p [, s]) ]
具有精度p和标度s的数字。 精度p的范围为1到38.标度s的范围为-84到127.精度和标度都是十进制数字。 NUMBER数据类型存储零以及正和负固定数字,绝对值为1.0 x 10-130但不包括1.0 x 10126.如果指定一个算术表达式,其值的绝对值大于或等于1.0 x 10126,然后Oracle返回错误。 每个NUMBER值需要1到22个字节。
使用以下格式指定定点数:
NUMBER(p,s)
例如:NUMBER(3,2),当要存入的数据为123.98时,是无法存入的,但是字段类型若为
NUMBER(5,2),则是可以存进去的,所以可以看出p包含所有的数位,s包含小数位精度。
2.2.FLOAT [(p)]
具有精度p的NUMBER数据类型的子类型。 FLOAT值在内部表示为NUMBER。 精度p的范围可以是1到126个二进制数字。 FLOAT值需要1到22个字节。转换ANSI FLOAT数据时,Oracle数据库在内部使用Oracle FLOAT数据类型。 Oracle FLOAT可供您使用,但Oracle建议您使用BINARY_FLOAT和BINARY_DOUBLE数据类型
2.3. LONG
可变长度的字符数据最多2千兆字节,或2^31 -1
字节。 提供向后兼容性。不要创建包含LONG列的表。 请改用LOB列(CLOB,NCLOB,BLOB)。 仅支持LONG列以实现向后兼容性。(极少使用)
3.Datetime and Interval Data Types时间类型
3.1. DATE
有效日期范围从公元前4712年1月1日到公元9999年12月31日。 默认格式由NLS_DATE_FORMAT参数显式确定,或由NLS_TERRITORY参数隐式确定。 大小固定为7个字节。 此数据类型包含日期时间字段YEAR,MONTH,DAY,HOUR,MINUTE和SECOND。 它没有小数秒或时区。
3.2.TIMESTAMP [(fractional_seconds_precision)]
日期的年,月和日值,以及小时,分钟和秒的时间值,其中fractional_seconds_precision是SECOND日期时间字段的小数部分中的位数。 fractional_seconds_precision的可接受值为0到9.默认值为6.默认格式由NLS_TIMESTAMP_FORMAT参数显式确定,或由NLS_TERRITORY参数隐式确定。 大小为7或11个字节,具体取决于精度。 此数据类型包含日期时间字段YEAR,MONTH,DAY,HOUR,MINUTE和SECOND。 它包含小数秒,但没有时区。
3.3.TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE
TIMESTAMP的所有值以及时区位移值,其中fractional_seconds_precision是SECOND日期时间字段的小数部分中的位数。 接受的值为0到9.默认值为6.默认格式由NLS_TIMESTAMP_FORMAT参数显式确定,或由NLS_TERRITORY参数隐式确定。 大小固定为13个字节。 此数据类型包含日期时间字段YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,TIMEZONE_HOUR和TIMEZONE_MINUTE。 它具有小数秒和显式时区。
3.4.TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE
TIMESTAMP WITH TIME ZONE的所有值,但以下情况除外:
- 当数据存储在数据库中时,数据被标准化为数据库时区。
- 检索数据时,用户会在会话时区中看到数据。
4.CLOB Data Type
包含单字节或多字节字符的字符大对象。 使用数据库字符集支持固定宽度和可变宽度字符集。 最大大小为(4千兆字节-1)*(数据库块大小)。
5.BLOB
二进制大对象。 最大大小为(4千兆字节-1)*(数据库块大小)。