不同存储间数据传输的时候,类型匹配是个很让人头疼的事情,笔者总结了常用几种存储的类型对照,以供参考。有不准确的地方,欢迎批评指正~
Java类型 | MySQL类型 | ClickHouse类型 | Oracle类型 | Hive类型 | Flink SQL类型 |
---|---|---|---|---|---|
boolean | boolean tinyint(1) | UInt8 | NUMBER(1) | boolean | BOOLEAN |
byte | tinyint | Int8 | NUMBER(3,0) | tinyint | TINYINT |
short | smallint tinyint unsigned | Int16 uint8 | NUMBER(5,0) | smallint | SMALLINT |
int | int mediumint smallint unsigned mediumint unsigned | Int32 uint16 | NUMBER(10,0) | int | INT |
long | bigint int unsigned | Int64 UInt32 | NUMBER(20,0) | bigint | BIGINT |
bigint (java.math.BigInteger) | bigint unsigned ( mysql官网不建议使用 ) | Int128 Int256 uInt64 uInt128 uInt256 | 不支持 (java.sql.Types不支持,因此Flink SQL也不支持,DataStream api中的TypeInformation是支持的) | ||
float | float float unsigned( 官网不建议使用 ) | Float32 | BINARY_FLOAT | float | FLOAT |
double | double double unsigned( 官网不建议使用 ) | Float64 | BINARY_DOUBLE | double | DOUBLE |
String | varchar char text tinytext mediumtext longtext | String uuid fixedString | VARCHAR2 NVARCHAR2 CHAR NCHAR LONG | string | STRING VARCHAR |
decimal | decimal numeric precision | Decimal | NUMBER FLOAT | DECIMAL | |
date | date year | Date | DATE | ||
time | time | TIME(0) | |||
timestamp | timestamp datetime | datetime64 | date(与mysql类型有歧义) | timestamp | TIMESTAMP |
byte[] | blob binary varbinary tinyblob mediumblob longblob | RAW | BYTES |
注:
- 对照表中每格第一个为优先级最高的,一对多时优先选择
- 对照不出来的,一律对照成String,此时需要进行类型强转(表示该存储没有可以直接对照的数据类型)
- mysql bigint unsigned官网不建议适用,并且明确说明应使用String存储https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html`
参考文档:
【1】Mysql与Flink类型对照
【2】ClickHouse与Flink类型对照
【3】Oracle字段类型与java对象类型对照表