oceanbase v4.2.5 mysql模式租户各种数据类型说明

OceanBase 4.2.5 CE BP2 HF1 – MySQL 模式数据类型参考

数据来源:源码路径 /Users/yuan/Documents/code/oceanbase-4.2.5_CE_BP2_HF1 核心定义文件:

  • deps/oblib/src/common/object/ob_obj_type.h — ObObjType 枚举定义
  • deps/oblib/src/rpc/obmysql/ob_mysql_global.h — MySQL 协议字段类型
  • deps/oblib/src/common/object/ob_obj_type.cpp — 取值范围数组
  • deps/oblib/src/lib/ob_define.h — 各类型最大长度常量
  • src/observer/table_load/backup/v_3_x/encoding/ob_encoding_util.h — 存储大小映射

一、整数类型 (Integer Types)

数据类型SQL 声明内部类型 (ObObjType)存储大小取值范围 (有符号)取值范围 (无符号)
TINYINTTINYINTObTinyIntType (1)1 字节-2⁷ ~ 2⁷-10 ~ 2⁸-1
SMALLINTSMALLINTObSmallIntType (2)2 字节-2¹⁵ ~ 2¹⁵-10 ~ 2¹⁶-1
MEDIUMINTMEDIUMINTObMediumIntType (3)3 字节-2²³ ~ 2²³-10 ~ 2²⁴-1
INTINT / INTEGERObInt32Type (4)4 字节-2³¹ ~ 2³¹-10 ~ 2³²-1
BIGINTBIGINTObIntType (5)8 字节-2⁶³ ~ 2⁶³-10 ~ 2⁶⁴-1

源码注释:ObTinyIntType 即 MySQL BOOLEAN 类型。显示宽度上限 OB_MAX_INTEGER_DISPLAY_WIDTH = 255

二、浮点类型 (Floating-Point Types)

数据类型SQL 声明内部类型存储大小取值范围
FLOATFLOAT[(M,D)]ObFloatType (11)4 字节±2⁻¹²⁶ ~ ±2¹²⁸(IEEE 754 单精度)
DOUBLEDOUBLE[(M,D)]ObDoubleType (12)8 字节±2⁻¹⁰²² ~ ±2¹⁰²⁴(IEEE 754 双精度)
FLOAT UNSIGNEDFLOAT UNSIGNEDObUFloatType (13)4 字节同 FLOAT,仅非负
DOUBLE UNSIGNEDDOUBLE UNSIGNEDObUDoubleType (14)8 字节同 DOUBLE,仅非负

源码常量:OB_MAX_FLOAT_PRECISION = 24OB_MAX_DOUBLE_FLOAT_PRECISION = 53OB_MAX_DOUBLE_FLOAT_SCALE = 30

三、定点数类型 (Fixed-Point Types)

数据类型SQL 声明内部类型存储大小说明
DECIMALDECIMAL[(M,D)] / NUMERIC[(M,D)]ObNumberType (15)变长M 最大 65 位,D 最大 30 位
DECIMAL UNSIGNEDDECIMAL UNSIGNEDObUNumberType (16)变长同 DECIMAL,仅非负

源码常量:OB_MAX_DECIMAL_PRECISION = 65OB_MAX_DECIMAL_SCALE = 30OB_MIN_DECIMAL_PRECISION = 1

四、日期时间类型 (Date and Time Types)

数据类型SQL 声明内部类型存储大小取值范围
DATEDATEObDateType (19) / ObMySQLDateType (52)3 字节‘1000-01-01’ ~ ‘9999-12-31’
DATETIMEDATETIME[(fsp)]ObDateTimeType (17) / ObMySQLDateTimeType (53)5~8 字节‘1000-01-01 00:00:00’ ~ ‘9999-12-31 23:59:59.999999’
TIMESTAMPTIMESTAMP[(fsp)]ObTimestampType (18)4~7 字节‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-19 03:14:07’ UTC
TIMETIME[(fsp)]ObTimeType (20)3~6 字节‘-838:59:59’ ~ ‘838:59:59’
YEARYEAR / YEAR(4)ObYearType (21)1 字节1901 ~ 2155
  • fsp (fractional seconds precision):0~6 位微秒精度,fsp 越大存储越大
  • 源码常量:OB_MAX_DATETIME_PRECISION = 6OB_MAX_DATE_PRECISION = 0
  • ObMySQLDateType 和 ObMySQLDateTimeType 是 OceanBase 4.x 新增的 MySQL 兼容内部类型,与 Oracle 模式的 DATE/DATETIME 使用不同的编码方式

五、字符串类型 (String Types)

数据类型SQL 声明内部类型最大长度说明
CHARCHAR(M)ObCharType (23)256 字符定长字符串,M: 0~256
VARCHARVARCHAR(M)ObVarcharType (22)2²⁰ 字节 (1MB)变长字符串
BINARYBINARY(M)ObCharType (binary)255 字节定长二进制
VARBINARYVARBINARY(M)ObVarcharType (binary)2¹⁶ 字节 (64KB)变长二进制
HEX STRINGX'hex' / 0xhexObHexStringType (24)十六进制字面量

源码常量:

  • OB_MAX_CHAR_LENGTH = 256
  • OB_MAX_MYSQL_VARCHAR_LENGTH = 65535(2¹⁶-1,兼容 MySQL)
  • OB_MAX_VARCHAR_LENGTH = 1048576(2²⁰,OceanBase 扩展为 1MB)
  • OB_MAX_BINARY_LENGTH = 255
  • OB_MAX_VARBINARY_LENGTH = 65536(2¹⁶)

六、大文本 / LOB 类型 (Text and Blob Types)

数据类型SQL 声明内部类型最大长度说明
TINYTEXTTINYTEXTObTinyTextType (27)2⁸ 字节短文本
TEXTTEXTObTextType (28)2¹⁶ 字节 (64KB)中等文本
MEDIUMTEXTMEDIUMTEXTObMediumTextType (29)2²⁴ 字节 (16MB)长文本
LONGTEXTLONGTEXTObLongTextType (30)2²⁹-1 字节 (~512MB)超长文本
TINYBLOBTINYBLOBObTinyTextType (binary)2⁸ 字节短二进制
BLOBBLOBObTextType (binary)2¹⁶ 字节 (64KB)中等二进制
MEDIUMBLOBMEDIUMBLOBObMediumTextType (binary)2²⁴ 字节 (16MB)长二进制
LONGBLOBLONGBLOBObLongTextType (binary)2²⁹-1 字节 (~512MB)超长二进制

源码常量:

  • OB_MAX_TINYTEXT_LENGTH = 256 (2⁸)
  • OB_MAX_TEXT_LENGTH = 65536 (2¹⁶)
  • OB_MAX_MEDIUMTEXT_LENGTH = 16777216 (2²⁴)
  • OB_MAX_LONGTEXT_LENGTH = 536870911(2²⁹-1,因为 datum.len_ 只有 29 bit)
  • 注意:OceanBase 的 LONGTEXT 最大长度为 ~512MB,而 MySQL 原生为 4GB

七、位类型 (Bit Type)

数据类型SQL 声明内部类型存储大小取值范围
BITBIT(M)ObBitType (31)1~8 字节M=1~64 位

源码常量:OB_MAX_BIT_LENGTH = 64

八、枚举和集合类型 (Enum and Set Types)

数据类型SQL 声明内部类型存储大小说明
ENUMENUM('val1','val2',...)ObEnumType (32)1~2 字节单选枚举
SETSET('val1','val2',...)ObSetType (33)1~8 字节多选集合

源码常量:

  • OB_MAX_ENUM_ELEMENT_NUM = 65535(枚举值最大数量)
  • OB_MAX_SET_ELEMENT_NUM = 64(集合值最大数量)

九、JSON 类型

数据类型SQL 声明内部类型存储大小说明
JSONJSONObJsonType (47)变长 (最大 ~512MB)JSON 文档

JSON 类型与 LONGTEXT 共享 LOB 存储

十、空间类型 (Geometry Types)

数据类型SQL 声明内部类型说明
GEOMETRYGEOMETRYObGeometryType (48)空间几何数据(父类型)
POINTPOINTObGeometryType (sub:1)
LINESTRINGLINESTRINGObGeometryType (sub:2)线
POLYGONPOLYGONObGeometryType (sub:3)多边形
MULTIPOINTMULTIPOINTObGeometryType (sub:4)多点
MULTILINESTRINGMULTILINESTRINGObGeometryType (sub:5)多线
MULTIPOLYGONMULTIPOLYGONObGeometryType (sub:6)多多边形
GEOMETRYCOLLECTIONGEOMETRYCOLLECTIONObGeometryType (sub:7)几何集合

源码枚举 ObGeoType 定义了所有子类型

十一、特殊 / 内部类型

内部类型编号说明
ObNullType0空值
ObExtendType25内部扩展类型(Min, Max, NOP 等)
ObUnknownType26预编译语句中的问号 ? 占位符
ObEnumInnerType34ENUM 内部存储类型
ObSetInnerType35SET 内部存储类型

与 MySQL 官方的差异

维度MySQL 8.0OceanBase 4.2.5
VARCHAR 最大长度2¹⁶-1 字节 (65,535)2²⁰ 字节 (1MB)
LONGTEXT 最大长度2³²-1 字节 (4GB)2²⁹-1 字节 (~512MB)
CHAR 最大长度255 字符256 字符
DECIMAL 最大精度65 位65 位(一致)
FLOAT 精度0~23 (单精度)最大 24
DOUBLE 精度24~53 (双精度)最大 53
YEAR 范围1901~21551901~2155(一致)
JSON支持支持(LOB 存储)
Geometry支持支持
BOOLEANTINYINT(1) 别名TINYINT 别名(一致)