美文网首页
Oracle内建的数据类型

Oracle内建的数据类型

作者: 第八共同体 | 来源:发表于2019-05-23 09:53 被阅读0次

    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表示该列将具有字符语义。

    image.png

    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个字节。

    image.png
    使用以下格式指定定点数:
    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数据类型


    image.png

    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。 它没有小数秒或时区。


    image.png

    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)*(数据库块大小)。


    image.png

    5.BLOB

    二进制大对象。 最大大小为(4千兆字节-1)*(数据库块大小)。

    相关文章

      网友评论

          本文标题:Oracle内建的数据类型

          本文链接:https://www.haomeiwen.com/subject/upomzqtx.html