OceanBase支持如下数据类型:

    • 数值类型

    • 日期时间类型

    • 字符类型

    • 大对象类型

    数值类型

    数值类型可以划分为三类:

    • 整数类型:BOOL/BOOLEANTINYINTSMALLINTMEDIUMINTINT/INTEGERBIGINT

    • 定点类型:DECIMAL/NUMERIC

    • 浮点类型:FLOATDOUBLE

    • Bit-Value类型:BIT

    所有数据类型都可以同时使用UNSIGNED关键字声明为无符号类型,这会导致值域发生变化。

    数值类型在定义时可以指定precision和scale,不同类型中precision和scale的含义可能有所不同,详情请见各类型详细说明。

    整数类型

    整数类型为定长、精确数值类型,值域取决于类型长度,以及是否为无符号,precision只表示最小显示宽度,详见“ZEROFILL属性”节。以下为相关信息:

    类型

    长度(字节)

    值域(有符号)

    值域(无符号)

    BOOL/BOOLEAN/TINYINT

    1

    [-2 ^ 7 , 2 ^ 7 - 1]

    [0, 2 ^ 8 - 1]

    SMALLINT

    2

    [-2 ^ 15, 2 ^ 15 - 1]

    [0, 2 ^ 16 - 1]

    MEDIUMINT

    3

    [-2 ^ 23, 2 ^ 23 - 1]

    [0, 2 ^ 24 - 1]

    INT/INTEGER

    4

    [-2 ^ 31, 2 ^ 31 - 1]

    [0, 2 ^ 32 - 1]

    BIGINT

    8

    [-2 ^ 63, 2 ^ 63 - 1]

    [0, 2 ^ 64 - 1]

    BOOL等价于BOOLEAN,这两个类型又等价于TINYINT(1)

    INT等价于INTEGER

    定点类型

    定点类型为变长、精确数值类型,值域和精度取决于precision和scale,以及是否为无符号。precision和scale分别表示十进制下的总最大有效位数、小数部分最大有效位数,整数部分最大有效位数等于precision - scale,其中precision和scale的最大值分别为65、30,默认值分别为10、0。例如:

    • DECIMAL(5, 2),整数部分和小数部分最大有效位数分别为3、2,所以值域为[-999.99, 999.99]。

    • 如果同时定义为UNSIGNED,则值域为[0, 999.99]。

    DECIMAL等价于NUMERIC

    浮点类型

    浮点类型为定长、非精确数值类型,值域和精度取决于类型长度、precision和scale,以及是否为无符号。precision和scale分别表示十进制下的总最大有效位数、小数部分最大有效位数,整数部分最大有效位数等于precision - scale,其中precision和scale的最大值分别为53、30。

    浮点类型的精度只是IEEE标准中规定的理论值,实际情况可能因硬件或操作系统限制略有不同。

    以下为不指定precision和scale时的默认信息:

    类型

    长度(字节)

    值域(有符号)

    值域(无符号)

    精度

    FLOAT

    4

    [-2 ^ 128, 2 ^ 128]

    [0, 2 ^ 128]

    7位

    DOUBLE

    8

    [-2 ^ 1024, 2 ^ 1024]

    [0, 2 ^ 1024]

    15位

    如果指定precision和scale,则值域确定方法与定点类型相同。

    ZEROFILL属性

    数值类型在定义时可以通过ZEROFILL关键字指定最小显示宽度,同时将该类型隐式定义为UNSIGNED。在数据实际显示宽度不足最小显示宽度时,通过先在小数部分补零到scale上限、再在整数部分补零到precision上限的方式,将显示宽度补足到最小显示宽度。例如:

    • INT(5) ZEROFILL:当数据值为123时,将显示为00123

    • DECIMAL(10, 5) ZEROFILL:当数据值为123.456时,将显示为00123.45600

    BIT-Value类型

    BIT数据类型用于存储bit values。一个BIT(M)能够存储M-bit的值,M的范围是1~64。

    bit value通过b’value’的形式指定,value是用0和1来指定的,例如,b’111’表示7,b’10000000’表示128。

    当向BIT(M)列插入值时,如果插入值的长度小于M,则会在左侧填充0。例如:将b’101’插入到BIT(6)时,相当于插入了b’000101’。

    日期时间类型

    以下为相关信息:

    类型

    格式

    下界

    上界

    含义

    DATETIME

    YYYY-MM-DD HH:MM:SS[.fraction]

    0000-01-01 00:00:00.000000

    9999-12-31 23:59:59.999999

    日期时间(不考虑时区)

    TIMESTAMP

    YYYY-MM-DD HH:MM:SS[.fraction]

    0000-01-01 00:00:00.000000

    9999-12-31 23:59:59.999999

    日期时间(考虑时区)

    DATE

    YYYY-MM-DD

    0000-01-01

    9999-12-31

    日期

    TIME

    HH:MM:SS[.fraction]

    -838:59:59.000000

    838:59:59.000000

    时间

    YEAR

    YYYY

    1901

    2155

    年份

    DATETIMETIMESTAMPTIME的值域和精度取决于scale。该属性表示小数部分最大有效位数,最大值为6,默认值为0。

    字符类型

    以下为普通字符类型相关信息:

    类型

    长度

    定义长度上限(字符)

    字符集

    VARCHAR

    变长

    262144 / 256K

    UTF8MB4

    VARBINARY

    变长

    1048576 / 1M

    BINARY

    CHAR

    定长

    256

    UTF8MB4

    BINARY

    定长

    256

    BINARY

    enum

    变长

    最多定义65535个元素,每个元素长度最多255个字符

    UTF8MB4

    set

    变长

    最多定义64个元素,每个元素长度最多255个字符

    UTF8MB4

    大对象类型

    以下为大对象类型相关信息:

    类型

    长度

    存储长度上限(字节)

    字符集

    TINYTEXT

    变长

    256

    UTF8MB4

    TINYBLOB

    变长

    256

    BINARY

    TEXT

    变长

    65536 / 64K

    UTF8MB4

    BLOB

    变长

    65536 / 64K

    BINARY

    MEDIUMTEXT

    变长

    16777216 / 16M

    UTF8MB4

    MEDIUMBLOB

    变长

    16777216 / 16M

    BINARY

    LONGTEXT

    变长

    50331648 / 48M

    UTF8MB4

    LONGBLOB

    变长

    50331648 / 48M

    BINARY