OceanBase支持如下数据类型:
- 数值类型
- 日期时间类型
- 字符类型
- 大对象类型
数值类型
数值类型可以划分为三类:
整数类型:
BOOL
/BOOLEAN
、TINYINT
、SMALLINT
、MEDIUMINT
、INT
/INTEGER
、BIGINT
。定点类型:
DECIMAL
/NUMERIC
。浮点类型:
FLOAT
、DOUBLE
。- Bit-Value类型:
BIT
所有数据类型都可以同时使用UNSIGNED
关键字声明为无符号类型,这会导致值域发生变化。
数值类型在定义时可以指定precision和scale,不同类型中precision和scale的含义可能有所不同,详情请见各类型详细说明。
整数类型
整数类型为定长、精确数值类型,值域取决于类型长度,以及是否为无符号,precision只表示最小显示宽度,详见“ZEROFILL属性”节。以下为相关信息:
类型 | 长度(字节) | 值域(有符号) | 值域(无符号) |
---|---|---|---|
| 1 | [-2 ^ 7 , 2 ^ 7 - 1] | [0, 2 ^ 8 - 1] |
| 2 | [-2 ^ 15, 2 ^ 15 - 1] | [0, 2 ^ 16 - 1] |
| 3 | [-2 ^ 23, 2 ^ 23 - 1] | [0, 2 ^ 24 - 1] |
| 4 | [-2 ^ 31, 2 ^ 31 - 1] | [0, 2 ^ 32 - 1] |
| 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时的默认信息:
类型 | 长度(字节) | 值域(有符号) | 值域(无符号) | 精度 |
---|---|---|---|---|
| 4 | [-2 ^ 128, 2 ^ 128] | [0, 2 ^ 128] | 7位 |
| 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’。
日期时间类型
以下为相关信息:
类型 | 格式 | 下界 | 上界 | 含义 |
---|---|---|---|---|
| YYYY-MM-DD HH:MM:SS[.fraction] | 0000-01-01 00:00:00.000000 | 9999-12-31 23:59:59.999999 | 日期时间(不考虑时区) |
| YYYY-MM-DD HH:MM:SS[.fraction] | 0000-01-01 00:00:00.000000 | 9999-12-31 23:59:59.999999 | 日期时间(考虑时区) |
| YYYY-MM-DD | 0000-01-01 | 9999-12-31 | 日期 |
| HH:MM:SS[.fraction] | -838:59:59.000000 | 838:59:59.000000 | 时间 |
| YYYY | 1901 | 2155 | 年份 |
DATETIME
、TIMESTAMP
、TIME
的值域和精度取决于scale。该属性表示小数部分最大有效位数,最大值为6,默认值为0。
字符类型
以下为普通字符类型相关信息:
类型 | 长度 | 定义长度上限(字符) | 字符集 |
---|---|---|---|
| 变长 | 262144 / 256K |
|
| 变长 | 1048576 / 1M |
|
| 定长 | 256 |
|
| 定长 | 256 |
|
| 变长 | 最多定义65535个元素,每个元素长度最多255个字符 |
|
| 变长 | 最多定义64个元素,每个元素长度最多255个字符 |
|
大对象类型
以下为大对象类型相关信息:
类型 | 长度 | 存储长度上限(字节) | 字符集 |
---|---|---|---|
| 变长 | 256 |
|
| 变长 | 256 |
|
| 变长 | 65536 / 64K |
|
| 变长 | 65536 / 64K |
|
| 变长 | 16777216 / 16M |
|
| 变长 | 16777216 / 16M |
|
| 变长 | 50331648 / 48M |
|
| 变长 | 50331648 / 48M |
|