1 引言
近期工作聚焦于跨数据库系统的数据类型兼容性研究,旨在解决多源异构数据迁移、系统集成及版本升级中的类型映射难题。具体任务包括:1)建立主流数据库(如MySQL、Oracle、PostgreSQL、SQL Server等)的数据类型映射体系 ,明确各类型在语义、精度、存储范围上的等价关系(如MySQL的VARCHAR
与Oracle的VARCHAR2
);2)梳理各数据库版本间的类型差异 (如MySQL 5.7与8.0的JSON支持、Oracle 12c的CLOB
性能优化),制定版本适配方案;3)结合业务场景输出映射指南 ,针对财务、地理信息等特殊需求提出类型选择建议(如高精度计算强制使用DECIMAL
)。通过此工作,可降低数据迁移风险,提升系统兼容性,并为后续数据库选型及版本升级提供技术依据,确保数据一致性与业务连续性。
整理如有错误,请各位朋友指正,谢谢。
2 各数据库数据类型映射成果
|----------|--------------|-------------------|----------------|----------------------------------|--------------------------|--------------------------|-------------------------|-------------------------|-------------------------|
| 通用类型 | mysql | oracle | SqlServer | PostgreSQL | DM | kingbase | GaussDB | GBase | TIDB |
| 数值类型 | TINYINT | | TINYINT | | TINYINT | | TINYINT | TINYINT | TINYINT |
| 数值类型 | SMALLINT | | SMALLINT | SMALLINT | SMALLINT | SMALLINT | SMALLINT | SMALLINT | SMALLINT |
| 数值类型 | MEDIUMINT | | | | | | | | MEDIUMINT |
| 数值类型 | INT(INTEGER) | INTEGER | INT(INTEGER) | INTEGER(INT) | INTEGER(INT) | INTEGER(INT) | INTEGER/INT | INTEGER/INT | INTEGER/INT |
| 数值类型 | BIGINT | | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT | BIGINT |
| 数值类型 | FLOAT | FLOAT | REAL | REAL | REAL | REAL | FLOAT | FLOAT | FLOAT |
| 数值类型 | DOUBLE | DOUBLE | FLOAT | DOUBLE PRECISION(FLOAT8) | DOUBLE PRECISION(FLOAT8) | DOUBLE PRECISION(FLOAT8) | DOUBLE/DOUBLE PRECISION | DOUBLE/DOUBLE PRECISION | DOUBLE/DOUBLE PRECISION |
| 数值类型 | DECIMAL | NUMBER/DECIMAL | NUMBER/DECIMAL | NUMERIC(DECIMAL) | NUMERIC(DECIMAL) | NUMERIC(DECIMAL) | DECIMAL/NUMERIC | DECIMAL/NUMERIC | DECIMAL/NUMERIC |
| 字符串类型 | CHAR | CHAR | CHAR | CHARACTER(n)(CHAR(n)) | CHAR(n) | CHAR(n) | CHAR(n) | CHAR(n) | CHAR(n) |
| 字符串类型 | VARCHAR | VARCHAR2 | VARCHAR | CHARACTER VARYING(n)(VARCHAR(n)) | VARCHAR(n) | VARCHAR(n) | VARCHAR(n) | VARCHAR(n) | VARCHAR(n) |
| 字符串类型 | TINYTEXT | | | | | | | | TINYTEXT |
| 字符串类型 | TEXT | CLOB | TEXT | TEXT | TEXT | TEXT | TEXT | TEXT | TEXT |
| 二进制字符串 | BINARY | RAW | BINARY | BYTEA | BINARY(n) | BINARY(n) | BINARY | BINARY | BINARY(n) |
| 二进制字符串 | VARBINAR | LONG RAW | VARBINARY | | VARBINARY(n) | VARBINARY(n) | VARBINARY | VARBINARY | VARBINARY(n) |
| 大对象类型 | BLOB | BLOB | IMAGE | | BLOB | BLOB | BLOB/CLOB | BLOB/CLOB | BLOB |
| 日期和时间类型 | DATE | DATE | DATE | DATE | DATE | DATE | DATE | DATE | DATE |
| 日期和时间类型 | TIME | DATE | TIME | TIME | TIME | TIME | TIME | TIME | TIME |
| 日期和时间类型 | DATETIME | DATE | DATETIME | TIMESTAMP | DATETIME | TIMESTAMP | DATETIME | DATETIME | DATETIME |
| 日期和时间类型 | TIMESTAMP | TIMESTAMP | DATETIME | TIMESTAMP | TIMESTAMP | TIMESTAMP | TIMESTAMP | TIMESTAMP | TIMESTAMP |
| 日期和时间类型 | YEAR | DATE | | | | | | | |
| 布尔类型 | BOOLEAN | CHAR(1)/NUMBER(1) | | BOOLEAN | BOOLEAN | BOOLEAN | BOOLEAN/BOOL | BOOLEAN/BOOL | |
| JSON 类型 | JSON | JSON | JSON | JSON | JSON | JSON | JSON | JSON | JSON |
3 数据库各版本数据类型映射关系
3.1 Oracle(11G/12C/18C/19C)
3.1.1 数值类型
数据类型 | 说明 | Oracle 版本支持 |
---|---|---|
NUMBER(p, s) |
可变长度数值类型,p 为精度(1-38),s 为小数位数(-84 到 127) |
11G/12C/18C/19C |
BINARY_FLOAT |
32 位单精度浮点数 | 11G/12C/18C/19C |
BINARY_DOUBLE |
64 位双精度浮点数 | 11G/12C/18C/19C |
INTEGER |
NUMBER(38) 的别名,表示整数 |
11G/12C/18C/19C |
FLOAT |
BINARY_FLOAT 的别名 |
11G/12C/18C/19C |
DECIMAL |
类似于 NUMBER ,但语法上更接近 SQL 标准 |
11G/12C/18C/19C |
版本变化:
- 数值类型在 Oracle 11G 及后续版本中基本保持稳定,没有显著变化。
3.1.2 字符类型
数据类型 | 说明 | Oracle 版本支持 |
---|---|---|
CHAR(n) |
固定长度字符串,n 为字节数(1-2000) |
11G/12C/18C/19C |
NCHAR(n) |
固定长度 Unicode 字符串,n 为字符数(1-1000) |
11G/12C/18C/19C |
VARCHAR2(n) |
可变长度字符串,n 为字节数(1-4000) |
11G/12C/18C/19C |
NVARCHAR2(n) |
可变长度 Unicode 字符串,n 为字符数(1-2000) |
11G/12C/18C/19C |
LONG |
可变长度字符串,最大长度 2GB(已逐渐被弃用,建议使用 CLOB ) |
11G/12C/18C/19C |
RAW(n) |
固定长度二进制数据,n 为字节数(1-2000) |
11G/12C/18C/19C |
LONG RAW |
可变长度二进制数据,最大长度 2GB(已逐渐被弃用,建议使用 BLOB ) |
11G/12C/18C/19C |
版本变化:
- 从 Oracle 12C 开始,字符类型的最大长度限制有所扩展(如
VARCHAR2
在某些情况下可支持 32,767 字节,但需使用扩展数据类型特性)。LONG
和LONG RAW
类型在较新版本中逐渐被弃用,建议使用CLOB
和BLOB
替代。
3.1.3 日期时间类型
数据类型 | 说明 | Oracle 版本支持 |
---|---|---|
DATE |
存储日期和时间,精度到秒,范围公元前 4712 年到公元 9999 年 | 11G/12C/18C/19C |
TIMESTAMP(p) |
存储日期和时间,精度到小数秒(p 为小数位数,0-9) |
11G/12C/18C/19C |
TIMESTAMP WITH TIME ZONE |
存储带时区的日期和时间 | 11G/12C/18C/19C |
TIMESTAMP WITH LOCAL TIME ZONE |
存储带时区的日期和时间,但存储时转换为数据库时区 | 11G/12C/18C/19C |
INTERVAL YEAR TO MONTH |
存储时间间隔(年-月) | 11G/12C/18C/19C |
INTERVAL DAY TO SECOND |
存储时间间隔(日-秒) | 11G/12C/18C/19C |
版本变化:
- 日期时间类型在 Oracle 11G 及后续版本中基本保持稳定,但时区相关类型在 12C 及后续版本中得到了更好的支持和优化。
3.1.4 大对象类型(LOB)
数据类型 | 说明 | Oracle 版本支持 |
---|---|---|
CLOB |
存储大文本数据,最大长度 (4GB - 1) * DB_BLOCK_SIZE | 11G/12C/18C/19C |
NCLOB |
存储大 Unicode 文本数据,最大长度同 CLOB |
11G/12C/18C/19C |
BLOB |
存储大二进制数据,最大长度同 CLOB |
11G/12C/18C/19C |
BFILE |
存储指向操作系统文件的指针,最大长度 4GB | 11G/12C/18C/19C |
版本变化:
- LOB 类型在 Oracle 11G 及后续版本中基本保持稳定,但 12C 及后续版本对 LOB 的存储和访问性能进行了优化。
3.1.5 二进制类型
数据类型 | 说明 | Oracle 版本支持 |
---|---|---|
ROWID |
存储行的物理地址,用于快速访问行 | 11G/12C/18C/19C |
UROWID |
存储逻辑行地址,适用于索引组织表和外键表 | 11G/12C/18C/19C |
版本变化:
- 二进制类型在 Oracle 11G 及后续版本中基本保持稳定。
3.1.6 布尔类型
BOOLEAN
:Oracle 本身不直接支持BOOLEAN
类型,但可以通过NUMBER(1)
或CHAR(1)
来模拟,其中1
/'Y'
表示TRUE
,0
/'N'
表示FALSE
。
3.1.7 空间数据类型(Oracle Spatial)
Oracle Spatial 是 Oracle 提供的空间数据扩展,支持存储和查询地理空间数据。主要数据类型包括:
SDO_GEOMETRY
:存储几何对象,如点、线、面等。SDO_TOPO_GEOMETRY
:存储拓扑几何对象。
版本变化:
- Oracle Spatial 在 11G 及后续版本中得到了持续的增强和优化,支持更多的空间函数和操作。
3.1.8 JSON 数据类型
从 Oracle 12C R2 开始,Oracle 提供了对 JSON 数据的支持:
- JSON 列 :可以将
VARCHAR2
、CLOB
或BLOB
列定义为存储 JSON 数据。 - JSON 函数 :提供了丰富的 JSON 函数,如
JSON_TABLE
、JSON_VALUE
、JSON_QUERY
等,用于提取和操作 JSON 数据。
版本变化:
- JSON 支持在 Oracle 12C R2 中引入,并在 18C 和 19C 中得到了进一步的增强和优化。
3.1.9 其他特殊类型
XMLType
:存储 XML 数据,支持 XML 查询和操作。- 用户定义类型(UDT):通过 PL/SQL 或 Java 创建自定义数据类型。
版本变化:
XMLType
和 UDT 在 Oracle 11G 及后续版本中保持稳定,但功能得到了持续的增强。
3.1.10 版本之间的主要变化
- Oracle 12C :
- 引入了多租户架构(CDB 和 PDB)。
- 增强了对 JSON 数据的支持(从 12C R2 开始)。
- 对 LOB 类型的存储和访问性能进行了优化。
- Oracle 18C 和 19C :
- 继续增强 JSON 支持,提供了更多的 JSON 函数和操作。
- 对空间数据类型进行了优化和增强。
- 引入了自动索引(Automatic Indexing)等新特性,但数据类型本身没有显著变化。
3.2 MySQL(5.x、8.x)
3.2.1 数据类型映射
数据类型分类 | 数据类型名称 | MySQL 8.x | MySQL 5.x | 备注 |
---|---|---|---|---|
数值类型 | TINYINT |
支持(1 字节有符号整数) | 支持 | 5.x 和 8.x 完全一致 |
数值类型 | SMALLINT |
支持(2 字节有符号整数) | 支持 | 5.x 和 8.x 完全一致 |
数值类型 | MEDIUMINT |
支持(3 字节有符号整数) | 支持 | 5.x 和 8.x 完全一致 |
数值类型 | INTEGER /INT |
支持(4 字节有符号整数) | 支持 | 5.x 和 8.x 完全一致 |
数值类型 | BIGINT |
支持(8 字节有符号整数) | 支持 | 5.x 和 8.x 完全一致 |
数值类型 | FLOAT |
支持(单精度浮点数) | 支持 | 5.x 和 8.x 完全一致 |
数值类型 | DOUBLE /DOUBLE PRECISION |
支持(双精度浮点数) | 支持 | 5.x 和 8.x 完全一致 |
数值类型 | DECIMAL /NUMERIC |
支持(高精度数值) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | CHAR(n) |
支持(定长字符串) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | VARCHAR(n) |
支持(变长字符串) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | TINYTEXT |
支持(短文本) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | TEXT |
支持(长文本) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | MEDIUMTEXT |
支持(中等长度文本) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | LONGTEXT |
支持(超长文本) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | BINARY(n) |
支持(定长二进制) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | VARBINARY(n) |
支持(变长二进制) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | BLOB |
支持(二进制大对象) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | MEDIUMBLOB |
支持(中等二进制大对象) | 支持 | 5.x 和 8.x 完全一致 |
字符串类型 | LONGBLOB |
支持(超长二进制大对象) | 支持 | 5.x 和 8.x 完全一致 |
日期和时间类型 | DATE |
支持(日期) | 支持 | 5.x 和 8.x 完全一致 |
日期和时间类型 | TIME |
支持(时间) | 支持 | 5.x 和 8.x 完全一致 |
日期和时间类型 | DATETIME |
支持(日期时间) | 支持 | 8.0 引入 DATETIME(fsp) 支持微秒精度(fsp=0-6),5.x 仅支持秒级精度 |
日期和时间类型 | TIMESTAMP |
支持(带时区的日期时间) | 支持 | 8.0 引入 TIMESTAMP(fsp) 支持微秒精度(fsp=0-6),5.x 仅支持秒级精度 |
日期和时间类型 | YEAR |
支持(年份) | 支持 | 5.x 和 8.x 完全一致 |
JSON 类型 | JSON |
支持(JSON 文档) | 5.7.8+ 支持 | 5.7.8 引入 JSON 类型,5.6 及以下版本不支持 |
枚举和集合类型 | ENUM |
支持(枚举类型) | 支持 | 5.x 和 8.x 完全一致 |
枚举和集合类型 | SET |
支持(集合类型) | 支持 | 5.x 和 8.x 完全一致 |
位类型 | BIT(M) |
支持(位数据类型) | 支持 | 5.x 和 8.x 完全一致 |
空间数据类型 | GEOMETRY |
支持(空间几何数据) | 支持(需开启插件或存储引擎) | 5.x 和 8.x 均支持,但需使用支持空间数据的存储引擎(如 MyISAM、InnoDB) |
空间数据类型 | POINT |
支持(点) | 支持 | 5.x 和 8.x 完全一致 |
空间数据类型 | LINESTRING |
支持(线) | 支持 | 5.x 和 8.x 完全一致 |
空间数据类型 | POLYGON |
支持(多边形) | 支持 | 5.x 和 8.x 完全一致 |
自动递增类型 | AUTO_INCREMENT |
支持(自增主键) | 支持 | 5.x 和 8.x 完全一致 |
序列类型 | SEQUENCE |
不支持 | 不支持 | MySQL 不支持序列类型,需通过自增主键或其他方式实现 |
3.2.2 版本差异说明
- JSON 类型 :
- MySQL 5.7.8+ 引入了
JSON
类型,支持 JSON 文档的存储和查询。 - MySQL 5.6 及以下版本 不支持
JSON
类型。
- MySQL 5.7.8+ 引入了
- 日期和时间类型的微秒精度 :
- MySQL 8.0 引入了
DATETIME(fsp)
和TIMESTAMP(fsp)
,支持微秒精度(fsp=0-6)。 - MySQL 5.x 仅支持秒级精度。
- MySQL 8.0 引入了
- 其他类型 :
- 数值、字符串、枚举、位等基础类型在 5.x 和 8.x 中均保持一致。
- 空间数据类型(如
GEOMETRY
、POINT
)在 5.x 和 8.x 中均支持,但需使用支持空间数据的存储引擎(如 MyISAM、InnoDB)。
3.3 SQL Server(2016、2017、2019、2022)
3.3.1 数值类型
数据类型 | 说明 | SQL Server 版本支持 |
---|---|---|
精确数值 | ||
BIT |
存储 0、1 或 NULL,用于表示布尔值 | 2016/2017/2019/2022 |
TINYINT |
1 字节,范围 0 到 255 | 2016/2017/2019/2022 |
SMALLINT |
2 字节,范围 -32,768 到 32,767 | 2016/2017/2019/2022 |
INT (INTEGER ) |
4 字节,范围 -2,147,483,648 到 2,147,483,647 | 2016/2017/2019/2022 |
BIGINT |
8 字节,范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 2016/2017/2019/2022 |
DECIMAL(p, s) |
p 为精度(1-38),s 为小数位数(0-p),固定精度和小数位数 |
2016/2017/2019/2022 |
NUMERIC(p, s) |
与 DECIMAL 相同 |
2016/2017/2019/2022 |
近似数值 | ||
FLOAT(n) |
4 或 8 字节浮点数,n 指定精度(1-53) |
2016/2017/2019/2022 |
REAL |
4 字节浮点数,等价于 FLOAT(24) |
2016/2017/2019/2022 |
3.3.2 字符串类型
数据类型 | 说明 | SQL Server 版本支持 |
---|---|---|
定长字符串 | ||
CHAR(n) |
固定长度字符串,n 为字符数(1-8,000) |
2016/2017/2019/2022 |
NCHAR(n) |
固定长度 Unicode 字符串,n 为字符数(1-4,000) |
2016/2017/2019/2022 |
变长字符串 | ||
VARCHAR(n) |
可变长度字符串,n 为字符数(1-8,000) |
2016/2017/2019/2022 |
VARCHAR(MAX) |
可变长度字符串,最大长度 2GB | 2016/2017/2019/2022 |
NVARCHAR(n) |
可变长度 Unicode 字符串,n 为字符数(1-4,000) |
2016/2017/2019/2022 |
NVARCHAR(MAX) |
可变长度 Unicode 字符串,最大长度 2GB | 2016/2017/2019/2022 |
文本类型 | ||
TEXT |
可变长度字符串,最大长度 2GB(已逐渐被弃用,建议使用 VARCHAR(MAX) ) |
2016/2017/2019/2022 |
NTEXT |
可变长度 Unicode 字符串,最大长度 1GB(已逐渐被弃用,建议使用 NVARCHAR(MAX) ) |
2016/2017/2019/2022 |
3.3.3 日期和时间类型
数据类型 | 说明 | SQL Server 版本支持 |
---|---|---|
DATE |
存储日期,格式 'YYYY-MM-DD',范围 0001-01-01 到 9999-12-31 | 2016/2017/2019/2022 |
TIME(n) |
存储时间,格式 'HH:MM:SS[.nnnnnnn]',n 为小数秒精度(0-7) |
2016/2017/2019/2022 |
DATETIME2(n) |
存储日期和时间,格式 'YYYY-MM-DD HH:MM:SS[.nnnnnnn]',n 为小数秒精度(0-7) |
2016/2017/2019/2022 |
SMALLDATETIME |
存储日期和时间,范围 1900-01-01 到 2079-06-06,精度到分钟 | 2016/2017/2019/2022 |
DATETIME |
存储日期和时间,范围 1753-01-01 到 9999-12-31,精度到 3.33 毫秒 | 2016/2017/2019/2022 |
DATETIMEOFFSET(n) |
存储带时区的日期和时间,n 为小数秒精度(0-7) |
2016/2017/2019/2022 |
3.3.4 二进制类型
数据类型 | 说明 | SQL Server 版本支持 |
---|---|---|
BINARY(n) |
固定长度二进制数据,n 为字节数(1-8,000) |
2016/2017/2019/2022 |
VARBINARY(n) |
可变长度二进制数据,n 为字节数(1-8,000) |
2016/2017/2019/2022 |
VARBINARY(MAX) |
可变长度二进制数据,最大长度 2GB | 2016/2017/2019/2022 |
IMAGE |
可变长度二进制数据,最大长度 2GB(已逐渐被弃用,建议使用 VARBINARY(MAX) ) |
2016/2017/2019/2022 |
3.3.5 其他特殊类型
数据类型 | 说明 | SQL Server 版本支持 |
---|---|---|
UNIQUEIDENTIFIER |
存储全局唯一标识符(GUID),16 字节 | 2016/2017/2019/2022 |
SQL_VARIANT |
存储除文本、ntext、图像、时间戳和 sql_variant 之外的各种数据类型的值 | 2016/2017/2019/2022 |
XML |
存储 XML 数据 | 2016/2017/2019/2022 |
CURSOR |
存储对数据库游标的引用 | 2016/2017/2019/2022 |
TABLE |
存储临时结果集,用于表值函数或存储过程中的临时表 | 2016/2017/2019/2022 |
HIERARCHYID |
存储表示层次结构中节点的数据 | 2016/2017/2019/2022 |
GEOMETRY |
存储平面空间数据(欧几里得坐标系) | 2016/2017/2019/2022 |
GEOGRAPHY |
存储地球表面空间数据(经纬度坐标系) | 2016/2017/2019/2022 |
3.3.6 JSON 数据类型
从 SQL Server 2016 开始,SQL Server 提供了对 JSON 数据的支持:
- JSON 列 :可以将
NVARCHAR
列定义为存储 JSON 数据。 - JSON 函数 :提供了丰富的 JSON 函数,如
JSON_VALUE
、JSON_QUERY
、JSON_MODIFY
、OPENJSON
等,用于提取、查询和修改 JSON 数据。
版本变化:
- JSON 支持在 SQL Server 2016 中引入,并在后续版本中得到了进一步的增强和优化。
3.3.7 版本之间的主要变化
- SQL Server 2016 :
- 引入了对 JSON 数据的支持。
- 提供了新的日期和时间类型(如
DATETIME2
和DATETIMEOFFSET
)的更好支持。 - 开始弃用
TEXT
、NTEXT
和IMAGE
类型,建议使用VARCHAR(MAX)
、NVARCHAR(MAX)
和VARBINARY(MAX)
替代。
- SQL Server 2017 :
- 增强了 JSON 支持,提供了更多的 JSON 函数和操作。
- 引入了对图数据(Graph Data)的支持(通过
NODE
和EDGE
表类型,但正式广泛支持在后续版本中增强)。
- SQL Server 2019 :
- 继续增强 JSON 支持。
- 对大数据和聚类列存储索引进行了优化。
- 引入了 UTF-8 支持(对于
CHAR
和VARCHAR
数据类型)。
- SQL Server 2022 :
- 提供了更多的性能优化和安全性增强。
- 对 JSON 和空间数据类型的支持更加完善。
- 引入了新的功能,如参数化查询的更多优化选项。
3.4 PostgreSQL(13.x、14.x、15.x、16.x、17.x)
3.4.1 数值类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
整数类型 | ||
SMALLINT |
2 字节有符号整数,范围 -32,768 到 32,767 | 13.x/14.x/15.x/16.x/17.x |
INTEGER (INT ) |
4 字节有符号整数,范围 -2,147,483,648 到 2,147,483,647 | 13.x/14.x/15.x/16.x/17.x |
BIGINT |
8 字节有符号整数,范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 13.x/14.x/15.x/16.x/17.x |
任意精度数值 | ||
NUMERIC (DECIMAL ) |
用户指定精度和小数位数的数值类型,精度最高可达 131,072 位 | 13.x/14.x/15.x/16.x/17.x |
浮点类型 | ||
REAL |
4 字节浮点数,约 6 位十进制数字精度 | 13.x/14.x/15.x/16.x/17.x |
DOUBLE PRECISION (FLOAT8 ) |
8 字节浮点数,约 15 位十进制数字精度 | 13.x/14.x/15.x/16.x/17.x |
3.4.2 字符串类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
变长字符串 | ||
CHARACTER VARYING(n) (VARCHAR(n) ) |
可变长度字符串,最大长度 n 字符 |
13.x/14.x/15.x/16.x/17.x |
TEXT |
可变长度字符串,无长度限制 | 13.x/14.x/15.x/16.x/17.x |
定长字符串 | ||
CHARACTER(n) (CHAR(n) ) |
固定长度字符串,不足部分用空格填充 | 13.x/14.x/15.x/16.x/17.x |
二进制字符串 | ||
BYTEA |
用于存储二进制数据 | 13.x/14.x/15.x/16.x/17.x |
3.4.3 日期和时间类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
TIMESTAMP |
日期和时间(无时区),精度可到微秒 | 13.x/14.x/15.x/16.x/17.x |
TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ ) |
日期和时间(带时区),精度可到微秒 | 13.x/14.x/15.x/16.x/17.x |
DATE |
日期(无时间部分) | 13.x/14.x/15.x/16.x/17.x |
TIME |
时间(无日期部分),精度可到微秒 | 13.x/14.x/15.x/16.x/17.x |
TIME WITH TIME ZONE |
时间(带时区),精度可到微秒 | 13.x/14.x/15.x/16.x/17.x |
INTERVAL |
时间间隔 | 13.x/14.x/15.x/16.x/17.x |
3.4.4 布尔类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
BOOLEAN |
存储 TRUE 、FALSE 或 NULL |
13.x/14.x/15.x/16.x/17.x |
3.4.5 枚举类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
ENUM |
用户自定义的枚举类型,包含一组预定义的字符串值 | 13.x/14.x/15.x/16.x/17.x |
3.4.6 数组类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
ARRAY |
可以是任何基础类型的数组,如 INTEGER[] 、TEXT[] |
13.x/14.x/15.x/16.x/17.x |
3.4.7 JSON 类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
JSON |
存储 JSON 数据,不验证数据格式 | 13.x/14.x/15.x/16.x/17.x |
JSONB |
存储 JSON 数据,二进制格式,支持索引和高效查询 | 13.x/14.x/15.x/16.x/17.x |
3.4.8 几何类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
POINT |
平面上的点 | 13.x/14.x/15.x/16.x/17.x |
LINE |
无限长的直线 | 13.x/14.x/15.x/16.x/17.x |
LSEG |
有限长的线段 | 13.x/14.x/15.x/16.x/17.x |
BOX |
矩形框 | 13.x/14.x/15.x/16.x/17.x |
PATH |
路径(由点组成) | 13.x/14.x/15.x/16.x/17.x |
POLYGON |
多边形 | 13.x/14.x/15.x/16.x/17.x |
CIRCLE |
圆 | 13.x/14.x/15.x/16.x/17.x |
3.4.9 网络地址类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
CIDR |
IPv4 或 IPv6 网络地址 | 13.x/14.x/15.x/16.x/17.x |
INET |
IPv4 或 IPv6 主机地址 | 13.x/14.x/15.x/16.x/17.x |
MACADDR |
MAC 地址 | 13.x/14.x/15.x/16.x/17.x |
MACADDR8 |
扩展的 MAC 地址(支持 EUI-64) | 13.x/14.x/15.x/16.x/17.x |
3.4.10 位串类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
BIT(n) |
固定长度位串,长度为 n |
13.x/14.x/15.x/16.x/17.x |
BIT VARYING(n) (VARBIT(n) ) |
可变长度位串,最大长度为 n |
13.x/14.x/15.x/16.x/17.x |
3.4.11 其他类型
数据类型 | 说明 | PostgreSQL 版本支持 |
---|---|---|
UUID |
通用唯一标识符 | 13.x/14.x/15.x/16.x/17.x |
XML |
存储 XML 数据 | 13.x/14.x/15.x/16.x/17.x |
伪类型 | 用于函数声明中的特殊类型,如 ANY 、ANYELEMENT 、ANYARRAY 等 |
13.x/14.x/15.x/16.x/17.x |
3.4.12 版本之间的主要变化
- PostgreSQL 13.x :
- 引入了
pg_stat_progress_create_index
视图,用于监控索引创建的进度。 - 增强了分区表的性能和功能。
- 数据类型方面,主要对现有类型的性能和稳定性进行了优化。
- 引入了
- PostgreSQL 14.x :
- 引入了逻辑复制的增强功能,如支持发布
SEQUENCE
。 - 改进了并行查询的性能。
- 数据类型方面,对
JSONB
类型的查询性能进行了优化。
- 引入了逻辑复制的增强功能,如支持发布
- PostgreSQL 15.x :
- 引入了
MERGE
语句,支持在单个语句中执行条件插入、更新和删除。 - 增强了 SQL/JSON 路径语言的支持。
- 数据类型方面,对
RANGE
类型的操作进行了优化。
- 引入了
- PostgreSQL 16.x :
- 引入了并行哈希连接,提高了复杂查询的性能。
- 增强了
pg_stat_statements
扩展,提供了更多的查询性能统计信息。 - 数据类型方面,对
ARRAY
类型的操作进行了优化,并引入了新的 JSON 函数。
- PostgreSQL 17.x (假设性说明,基于 PostgreSQL 的发布趋势):
- 可能会引入更多的性能优化和功能增强,如更高效的索引类型、更强大的查询处理能力等。
- 数据类型方面,可能会引入新的类型或对现有类型进行进一步的优化和扩展。
3.5 达梦数据库-DM(7.x、8.x)
3.5.1 数值类型
数据类型 | 说明 | DM7.x/DM8.x 支持 |
---|---|---|
整数类型 | ||
TINYINT |
1 字节有符号整数,范围 -128 到 127 | DM8.x 新增 |
SMALLINT |
2 字节有符号整数,范围 -32,768 到 32,767 | DM7.x/DM8.x |
INTEGER (INT ) |
4 字节有符号整数,范围 -2,147,483,648 到 2,147,483,647 | DM7.x/DM8.x |
BIGINT |
8 字节有符号整数,范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | DM7.x/DM8.x |
任意精度数值 | ||
NUMERIC (DECIMAL ) |
用户指定精度和小数位数的数值类型,精度最高可达 38 位 | DM7.x/DM8.x |
浮点类型 | ||
REAL |
4 字节浮点数,约 6 位十进制数字精度 | DM7.x/DM8.x |
DOUBLE PRECISION (FLOAT8 ) |
8 字节浮点数,约 15 位十进制数字精度 | DM7.x/DM8.x |
FLOAT(n) |
可变精度浮点数,n 为精度(1 到 53) |
DM7.x/DM8.x |
3.5.2 字符串类型
数据类型 | 说明 | DM7.x/DM8.x 支持 |
---|---|---|
变长字符串 | ||
VARCHAR(n) |
可变长度字符串,最大长度 n 字节(DM8.x 支持 n 最大为 8,188 字节) |
DM7.x/DM8.x |
TEXT |
可变长度字符串,无长度限制 | DM8.x 新增 |
定长字符串 | ||
CHAR(n) |
固定长度字符串,不足部分用空格填充 | DM7.x/DM8.x |
二进制字符串 | ||
BINARY(n) |
固定长度二进制字符串,长度为 n 字节 |
DM7.x/DM8.x |
VARBINARY(n) |
可变长度二进制字符串,最大长度 n 字节 |
DM7.x/DM8.x |
BLOB |
二进制大对象,用于存储大量二进制数据 | DM8.x 新增 |
3.5.3 日期和时间类型
数据类型 | 说明 | DM7.x/DM8.x 支持 |
---|---|---|
DATE |
日期(无时间部分),格式为 YYYY-MM-DD |
DM7.x/DM8.x |
TIME |
时间(无日期部分),格式为 HH:MI:SS ,支持毫秒 |
DM7.x/DM8.x |
TIMESTAMP |
日期和时间,格式为 YYYY-MM-DD HH:MI:SS ,支持毫秒 |
DM7.x/DM8.x |
DATETIME |
日期和时间,格式为 YYYY-MM-DD HH:MI:SS ,支持毫秒(与 TIMESTAMP 类似) |
DM7.x/DM8.x |
3.5.4 布尔类型
数据类型 | 说明 | DM7.x/DM8.x 支持 |
---|---|---|
BOOLEAN |
存储 TRUE 、FALSE 或 NULL |
DM8.x 新增 |
3.5.5 JSON 类型
数据类型 | 说明 | DM7.x/DM8.x 支持 |
---|---|---|
JSON |
存储 JSON 数据,支持 JSON 格式验证和查询 | DM8.x 新增 |
3.5.6 大对象类型
数据类型 | 说明 | DM7.x/DM8.x 支持 |
---|---|---|
CLOB |
字符大对象,用于存储大量文本数据 | DM8.x 新增 |
BLOB |
二进制大对象,用于存储大量二进制数据 | DM8.x 新增 |
3.5.7 其他类型
数据类型 | 说明 | DM7.x/DM8.x 支持 |
---|---|---|
ROWID |
行标识符,用于唯一标识表中的一行 | DM7.x/DM8.x |
XML |
存储 XML 数据(部分版本支持) | DM7.x/DM8.x |
3.5.8 DM7.x 和 DM8.x 版本之间的数据类型变化
1. 新增的数据类型
TINYINT
:DM8.x 新增了TINYINT
类型,用于存储 1 字节的有符号整数,适用于需要节省存储空间的场景。TEXT
和CLOB
:DM8.x 新增了TEXT
和CLOB
类型,用于存储大量文本数据,解决了 DM7.x 中字符串长度限制的问题。BLOB
:DM8.x 新增了BLOB
类型,用于存储大量二进制数据,如图片、音频等。BOOLEAN
:DM8.x 新增了BOOLEAN
类型,用于存储布尔值,简化了逻辑判断的表达。JSON
:DM8.x 新增了JSON
类型,支持 JSON 格式的存储和查询,满足了现代应用对 JSON 数据的需求。
2. 改进的数据类型
VARCHAR(n)
的长度限制 :DM8.x 中VARCHAR(n)
的最大长度从 DM7.x 的 4,000 字节扩展到了 8,188 字节,提供了更大的灵活性。- 日期和时间类型的增强 :DM8.x 对日期和时间类型的支持更加完善,如
TIMESTAMP
和DATETIME
类型都支持毫秒精度。
3. 移除或弃用的数据类型
- 在 DM8.x 中,未发现明显的移除或弃用数据类型的情况,但部分功能或语法可能发生了变化,建议查阅官方文档以获取最新信息。
3.6 人大金仓-KingBase( V7、V8、V9**)**
3.6.1 数值类型
数据类型 | 说明 | V7/V8/V9 支持 |
---|---|---|
整数类型 | ||
SMALLINT |
2 字节有符号整数,范围 -32,768 到 32,767 | V7/V8/V9 |
INTEGER (INT ) |
4 字节有符号整数,范围 -2,147,483,648 到 2,147,483,647 | V7/V8/V9 |
BIGINT |
8 字节有符号整数,范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | V7/V8/V9 |
任意精度数值 | ||
NUMERIC (DECIMAL ) |
用户指定精度和小数位数的数值类型,精度最高可达 38 位 | V7/V8/V9 |
浮点类型 | ||
REAL |
4 字节浮点数,约 6 位十进制数字精度 | V7/V8/V9 |
DOUBLE PRECISION (FLOAT8 ) |
8 字节浮点数,约 15 位十进制数字精度 | V7/V8/V9 |
FLOAT(n) |
可变精度浮点数,n 为精度(1 到 53) |
V7/V8/V9 |
3.6.2 字符串类型
数据类型 | 说明 | V7/V8/V9 支持 |
---|---|---|
变长字符串 | ||
VARCHAR(n) |
可变长度字符串,最大长度 n 字节(V9 版本支持 n 最大为 1GB) |
V7/V8/V9 |
TEXT |
可变长度字符串,无长度限制(V8/V9 新增) | V8/V9 |
定长字符串 | ||
CHAR(n) |
固定长度字符串,不足部分用空格填充 | V7/V8/V9 |
二进制字符串 | ||
BINARY(n) |
固定长度二进制字符串,长度为 n 字节 |
V7/V8/V9 |
VARBINARY(n) |
可变长度二进制字符串,最大长度 n 字节 |
V7/V8/V9 |
BLOB |
二进制大对象,用于存储大量二进制数据(V8/V9 新增) | V8/V9 |
3.6.3 日期和时间类型
数据类型 | 说明 | V7/V8/V9 支持 |
---|---|---|
DATE |
日期(无时间部分),格式为 YYYY-MM-DD |
V7/V8/V9 |
TIME |
时间(无日期部分),格式为 HH:MI:SS ,支持毫秒 |
V7/V8/V9 |
TIMESTAMP |
日期和时间,格式为 YYYY-MM-DD HH:MI:SS ,支持毫秒 |
V7/V8/V9 |
TIMESTAMP WITH TIME ZONE |
带时区的日期和时间(V9 新增) | V9 |
3.6.4 布尔类型
数据类型 | 说明 | V7/V8/V9 支持 |
---|---|---|
BOOLEAN |
存储 TRUE 、FALSE 或 NULL (V8/V9 新增) |
V8/V9 |
3.6.5 JSON 类型
数据类型 | 说明 | V7/V8/V9 支持 |
---|---|---|
JSON |
存储 JSON 数据,支持 JSON 格式验证和查询(V9 新增) | V9 |
3.6.6 大对象类型
数据类型 | 说明 | V7/V8/V9 支持 |
---|---|---|
CLOB |
字符大对象,用于存储大量文本数据(V8/V9 新增) | V8/V9 |
BLOB |
二进制大对象,用于存储大量二进制数据(V8/V9 新增) | V8/V9 |
3.6.7 其他类型
数据类型 | 说明 | V7/V8/V9 支持 |
---|---|---|
UUID |
通用唯一标识符(V9 新增) | V9 |
XML |
存储 XML 数据(部分版本支持) | V7/V8/V9 |
3.6.8 V7、V8、V9 版本之间的数据类型变化
1. 新增的数据类型
- V8 版本新增 :
TEXT
:用于存储无长度限制的字符串,解决了 V7 中字符串长度限制的问题。CLOB
和BLOB
:用于存储大量文本和二进制数据,满足大对象存储需求。BOOLEAN
:用于存储布尔值,简化了逻辑判断的表达。
- V9 版本新增 :
JSON
:支持 JSON 格式的存储和查询,满足了现代应用对 JSON 数据的需求。TIMESTAMP WITH TIME ZONE
:支持带时区的日期和时间,增强了时区处理能力。UUID
:用于生成通用唯一标识符,适用于分布式系统。
2. 改进的数据类型
VARCHAR(n)
的长度限制 :- V7 版本中,
VARCHAR(n)
的最大长度可能有限制(具体取决于版本和配置)。 - V9 版本中,
VARCHAR(n)
的最大长度支持到 1GB,提供了更大的灵活性。
- V7 版本中,
- 日期和时间类型的增强 :
- V9 版本新增了
TIMESTAMP WITH TIME ZONE
类型,支持带时区的日期和时间处理。
- V9 版本新增了
3. 移除或弃用的数据类型
- 在 V7、V8、V9 版本中,未发现明显的移除或弃用数据类型的情况。但部分功能或语法可能发生了变化,建议查阅官方文档以获取最新信息。
3.7 GaussDB ( for MySQL、for PostgreSQL、DWS、for Influx、for Mongo**)**
3.7.1 数据类型映射
数据类型分类 | 数据类型名称 | GaussDB(for MySQL) | GaussDB(for PostgreSQL) | GaussDB(DWS) | GaussDB(for Influx) | GaussDB(for Mongo) |
---|---|---|---|---|---|---|
数值类型 | TINYINT |
支持(1 字节有符号整数) | 不支持(PostgreSQL 无原生 TINYINT ,可用 SMALLINT 替代) |
不支持(DWS 主要聚焦分析,不常用基础数值类型) | 不支持(时序数据库侧重浮点/时间戳) | 不支持(MongoDB 使用 NumberInt 或 NumberLong ) |
数值类型 | SMALLINT |
支持(2 字节有符号整数) | 支持 | 支持 | 不支持 | 使用 NumberInt (32 位整数) |
数值类型 | INTEGER /INT |
支持(4 字节有符号整数) | 支持 | 支持 | 不支持 | 使用 NumberInt 或 NumberLong (64 位整数) |
数值类型 | BIGINT |
支持(8 字节有符号整数) | 支持 | 支持 | 不支持 | 使用 NumberLong |
数值类型 | FLOAT |
支持(单精度浮点数) | 支持 | 支持 | 不支持(时序数据用 FLOAT 或 DOUBLE 存储值) |
使用 NumberDouble (双精度浮点数) |
数值类型 | DOUBLE /DOUBLE PRECISION |
支持(双精度浮点数) | 支持 | 支持 | 支持(存储时序数据的值) | 使用 NumberDouble |
数值类型 | DECIMAL /NUMERIC |
支持(高精度数值) | 支持 | 支持 | 不支持(时序数据库不常用) | 使用 NumberDecimal (高精度十进制) |
字符串类型 | CHAR(n) |
支持(定长字符串) | 支持 | 支持 | 不支持(时序数据库不常用) | 使用字符串类型(如 "string" ) |
字符串类型 | VARCHAR(n) |
支持(变长字符串) | 支持 | 支持 | 不支持 | 使用字符串类型 |
字符串类型 | TEXT |
支持(长文本) | 支持 | 支持 | 不支持 | 使用字符串类型(无长度限制) |
字符串类型 | BINARY /VARBINARY |
支持(二进制数据) | 不支持(PostgreSQL 用 BYTEA 替代) |
不支持 | 不支持 | 使用 BinData (二进制数据) |
日期和时间类型 | DATE |
支持(日期) | 支持 | 支持 | 不支持(时序数据库用时间戳) | 使用 ISODate (日期时间) |
日期和时间类型 | TIME |
支持(时间) | 支持 | 支持 | 不支持 | 使用 ISODate (包含时间部分) |
日期和时间类型 | DATETIME |
支持(日期时间) | 不支持(PostgreSQL 用 TIMESTAMP 替代) |
支持 | 不支持 | 使用 ISODate |
日期和时间类型 | TIMESTAMP |
支持(带时区的日期时间,部分版本支持) | 支持 | 支持 | 核心类型(时序数据库的时间戳) | 使用 ISODate |
日期和时间类型 | TIMESTAMP WITH TIME ZONE |
支持(带时区的日期时间,部分版本增强) | 支持 | 支持 | 默认支持(时序数据库的关键字段) | 使用 ISODate (可存储时区信息) |
布尔类型 | BOOLEAN /BOOL |
支持(逻辑值) | 支持 | 支持 | 不支持(时序数据库用 0 /1 或字段标记) |
使用 Boolean 类型 |
JSON 类型 | JSON |
支持(JSON 文档) | 支持 | 支持(部分版本) | 不支持(时序数据库用字段存储 JSON 字符串) | 原生支持(MongoDB 的核心数据模型) |
数组类型 | ARRAY |
不支持(MySQL 无原生数组) | 支持(PostgreSQL 特色) | 支持(部分版本) | 不支持 | 支持(MongoDB 的数组字段) |
地理空间类型 | GEOMETRY /GEOGRAPHY |
不支持(MySQL 需插件) | 支持(PostGIS 扩展) | 不支持 | 不支持 | 支持(MongoDB 的 GeoJSON 格式) |
大对象类型 | BLOB /CLOB |
支持(二进制/文本大对象) | 支持(BYTEA /TEXT ) |
支持(部分版本) | 不支持 | 使用 GridFS (MongoDB 的大文件存储) |
时序专用类型 | TAG /FIELD |
不支持 | 不支持 | 不支持 | 核心类型(InfluxDB 的标签和字段) | 不支持 |
UUID 类型 | UUID |
支持(部分版本) | 支持(PostgreSQL 原生) | 支持(部分版本) | 不支持 | 使用 ObjectId (MongoDB 的唯一标识符) |
自动递增类型 | AUTO_INCREMENT |
支持(MySQL 自增主键) | 不支持(PostgreSQL 用 SERIAL 或序列) |
不支持(DWS 用分布式 ID 生成器) | 不支持 | 使用 _id 字段(MongoDB 自动生成) |
3.7.2 版本差异说明
- GaussDB(for MySQL) :
- 完全兼容 MySQL 数据类型,包括
TINYINT
、AUTO_INCREMENT
等。 - 不支持 PostgreSQL 的高级类型(如
ARRAY
、GEOMETRY
)。
- 完全兼容 MySQL 数据类型,包括
- GaussDB(for PostgreSQL) :
- 支持 PostgreSQL 的所有原生类型,包括
ARRAY
、GEOMETRY
等。 - 不支持 MySQL 特有的
TINYINT
、AUTO_INCREMENT
,但提供替代方案(如SERIAL
)。
- 支持 PostgreSQL 的所有原生类型,包括
- GaussDB(DWS) :
- 聚焦分析型场景,支持基础数值、字符串、日期类型。
- 部分版本支持 JSON 和数组类型,但不如关系型版本丰富。
- GaussDB(for Influx) :
- 专为时序数据设计,核心类型为
TIMESTAMP
、TAG
、FIELD
。 - 不支持关系型数据库的复杂类型(如
JSON
、ARRAY
)。
- 专为时序数据设计,核心类型为
- GaussDB(for Mongo) :
- 使用 MongoDB 的文档模型,支持
JSON
、Array
、ObjectId
等。 - 不支持关系型数据库的类型(如
INT
、VARCHAR
),但提供类似功能的替代方案。
- 使用 MongoDB 的文档模型,支持
3.8 GBase(GBase 8a、GBase 8s、GBase 8c)
3.8.1 数据类型映射
数据类型分类 | 数据类型名称 | GBase 8a | GBase 8s | GBase 8c |
---|---|---|---|---|
数值类型 | TINYINT |
支持(1 字节有符号整数) | 支持(1 字节有符号整数) | 支持(1 字节有符号整数) |
数值类型 | SMALLINT |
支持(2 字节有符号整数) | 支持(2 字节有符号整数) | 支持(2 字节有符号整数) |
数值类型 | INTEGER /INT |
支持(4 字节有符号整数) | 支持(4 字节有符号整数) | 支持(4 字节有符号整数) |
数值类型 | BIGINT |
支持(8 字节有符号整数) | 支持(8 字节有符号整数) | 支持(8 字节有符号整数) |
数值类型 | FLOAT |
支持(单精度浮点数) | 支持(单精度浮点数) | 支持(单精度浮点数) |
数值类型 | DOUBLE /DOUBLE PRECISION |
支持(双精度浮点数) | 支持(双精度浮点数) | 支持(双精度浮点数) |
数值类型 | DECIMAL /NUMERIC |
支持(高精度数值) | 支持(高精度数值) | 支持(高精度数值) |
字符串类型 | CHAR(n) |
支持(定长字符串) | 支持(定长字符串) | 支持(定长字符串) |
字符串类型 | VARCHAR(n) |
支持(变长字符串) | 支持(变长字符串) | 支持(变长字符串) |
字符串类型 | TEXT |
支持(长文本) | 支持(长文本) | 支持(长文本) |
字符串类型 | BINARY /VARBINARY |
支持(二进制数据) | 支持(二进制数据) | 支持(二进制数据) |
日期和时间类型 | DATE |
支持(日期) | 支持(日期) | 支持(日期) |
日期和时间类型 | TIME |
支持(时间) | 支持(时间) | 支持(时间) |
日期和时间类型 | DATETIME |
支持(日期时间) | 支持(日期时间) | 支持(日期时间) |
日期和时间类型 | TIMESTAMP |
支持(带时区的日期时间,部分版本支持) | 支持(带时区的日期时间) | 支持(带时区的日期时间) |
日期和时间类型 | TIMESTAMP WITH TIME ZONE |
支持(部分版本增强) | 支持(带时区的日期时间) | 支持(带时区的日期时间) |
布尔类型 | BOOLEAN /BOOL |
支持(逻辑值) | 支持(逻辑值) | 支持(逻辑值) |
JSON 类型 | JSON |
部分支持(GBase 8a 增强版支持 JSON 存储) | 支持(GBase 8s 原生支持 JSON) | 支持(GBase 8c 原生支持 JSON) |
数组类型 | ARRAY |
不支持(GBase 8a 无原生数组) | 不支持(GBase 8s 无原生数组) | 支持(GBase 8c 支持数组类型) |
地理空间类型 | GEOMETRY /GEOGRAPHY |
不支持(GBase 8a 无原生地理空间类型) | 部分支持(需扩展插件) | 支持(GBase 8c 支持地理空间类型,需扩展) |
大对象类型 | BLOB /CLOB |
支持(二进制/文本大对象) | 支持(二进制/文本大对象) | 支持(二进制/文本大对象) |
UUID 类型 | UUID |
支持(部分版本) | 支持(GBase 8s 原生支持) | 支持(GBase 8c 原生支持) |
自动递增类型 | AUTO_INCREMENT |
支持(自增主键) | 支持(自增主键) | 支持(自增主键) |
序列类型 | SEQUENCE |
不支持(GBase 8a 无原生序列) | 支持(GBase 8s 原生支持序列) | 支持(GBase 8c 原生支持序列) |
位类型 | BIT /BIT VARYING |
支持(位数据类型) | 支持(位数据类型) | 支持(位数据类型) |
枚举类型 | ENUM |
支持(枚举类型) | 不支持(GBase 8s 无原生枚举) | 不支持(GBase 8c 无原生枚举) |
集合类型 | SET |
支持(集合类型) | 不支持(GBase 8s 无原生集合) | 不支持(GBase 8c 无原生集合) |
3.8.2 版本差异说明
- GBase 8a :
- 专注于分析型场景,支持基础数值、字符串、日期类型。
- 部分增强版支持 JSON 类型,但不支持数组、地理空间等高级类型。
- 不支持序列类型,需通过应用层实现自增逻辑。
- GBase 8s :
- 兼容传统关系型数据库,支持完整的数值、字符串、日期类型。
- 原生支持 JSON、序列类型,但需扩展插件支持地理空间类型。
- 不支持数组类型,但提供其他高级功能(如触发器、存储过程)。
- GBase 8c :
- 支持分布式架构,兼容 PostgreSQL 生态,类型系统更丰富。
- 原生支持 JSON、数组、地理空间类型,适合复杂数据模型。
- 支持序列类型,适合需要分布式 ID 生成的场景。
3.9 TiDB(v8.5、v8.4、v8.3、v8.2、v8.1、v8.0、v7.6)
3.9.1 数据类型映射
数据类型分类 | 数据类型名称 | v8.5 | v8.4 | v8.3 | v8.2 | v8.1 | v8.0 | v7.6 |
---|---|---|---|---|---|---|---|---|
数值类型 | TINYINT |
支持(1 字节有符号整数) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数值类型 | SMALLINT |
支持(2 字节有符号整数) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数值类型 | MEDIUMINT |
支持(3 字节有符号整数) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数值类型 | INTEGER /INT |
支持(4 字节有符号整数) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数值类型 | BIGINT |
支持(8 字节有符号整数) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数值类型 | FLOAT |
支持(单精度浮点数) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数值类型 | DOUBLE /DOUBLE PRECISION |
支持(双精度浮点数) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数值类型 | DECIMAL /NUMERIC |
支持(高精度数值) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | CHAR(n) |
支持(定长字符串) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | VARCHAR(n) |
支持(变长字符串) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | TINYTEXT |
支持(短文本) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | TEXT |
支持(长文本) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | MEDIUMTEXT |
支持(中等长度文本) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | LONGTEXT |
支持(超长文本) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | BINARY(n) |
支持(定长二进制) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | VARBINARY(n) |
支持(变长二进制) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | BLOB |
支持(二进制大对象) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | MEDIUMBLOB |
支持(中等二进制大对象) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
字符串类型 | LONGBLOB |
支持(超长二进制大对象) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
日期和时间类型 | DATE |
支持(日期) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
日期和时间类型 | TIME |
支持(时间) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
日期和时间类型 | DATETIME |
支持(日期时间) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
日期和时间类型 | TIMESTAMP |
支持(带时区的日期时间) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
日期和时间类型 | YEAR |
支持(年份) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
JSON 类型 | JSON |
支持(JSON 文档) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
枚举和集合类型 | ENUM |
支持(枚举类型) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
枚举和集合类型 | SET |
支持(集合类型) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
位类型 | BIT(M) |
支持(位数据类型) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
空间数据类型 | GEOMETRY |
支持(空间几何数据) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 不支持 |
空间数据类型 | POINT |
支持(点) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 不支持 |
空间数据类型 | LINESTRING |
支持(线) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 不支持 |
空间数据类型 | POLYGON |
支持(多边形) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 支持(需开启插件) | 不支持 |
自动递增类型 | AUTO_INCREMENT |
支持(自增主键) | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
序列类型 | SEQUENCE |
不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
3.9.2 版本差异说明
- 空间数据类型 :
- 从 v7.6 开始,TiDB 不支持空间数据类型(如
GEOMETRY
、POINT
)。 - 从 v8.0 开始,TiDB 支持空间数据类型,但需通过插件(如 TiDB GIS)开启。
- 后续版本(v8.1+)继续支持空间数据类型,且功能逐渐完善。
- 从 v7.6 开始,TiDB 不支持空间数据类型(如
- JSON 类型 :
- 所有版本均支持 JSON 类型,但 v8.0+ 对 JSON 函数的性能和功能进行了优化。
- 其他类型 :
- 数值、字符串、日期等基础类型在所有版本中均保持一致。
- TiDB 不支持序列类型(
SEQUENCE
),需通过自增主键或其他方式实现。
4 总结
时间有点紧,整理如有错误,请各位朋友指正,谢谢。