MySQL数据类型 | JAVA数据类型 | JDBC TYPE | 普通变量类型 | 主键类型 |
BIGINT | Long | BIGINT | 支持 | 支持 |
TINYINT | Byte | TINYINT | 支持 | 不支持 |
SMALLINT | Short | SMALLINT | 支持 | 不支持 |
MEDIUMINT | Integer | INTEGER | 支持 | 支持 |
INTEGER | Integer | INTEGER | 支持 | 支持 |
INT | Integer | INTEGER | 支持 | 支持 |
FLOAT | Float | REAL | 支持 | 不支持 |
DOUBLE | Double | DOUBLE | 支持 | 不支持 |
DECIMAL | BigDecimal | DECIMAL | 支持 | 不支持 |
NUMERIC | BigDecimal | DECIMAL | 支持 | 不支持 |
CHAR | String | CHAR | 支持 | 不支持 |
VARCHAR | String | VARCHAR | 支持 | 不支持 |
TINYBLOB | DataTypeWithBLOBs.byte[] | BINARY | 不支持 | 不支持 |
TINYTEXT | String | VARCHAR | 支持 | 不支持 |
BLOB | DataTypeWithBLOBs.byte[] | BINARY | 不支持 | 不支持 |
TEXT | DataTypeWithBLOBs.String | LONGVARCHAR | 不支持 | 不支持 |
MEDIUMBLOB | DataTypeWithBLOBs.byte[] | LONGVARBINARY | 不支持 | 不支持 |
MEDIUMTEXT | DataTypeWithBLOBs.String | LONGVARCHAR | 不支持 | 不支持 |
LONGBLOB | DataTypeWithBLOBs.byte[] | LONGVARBINARY | 不支持 | 不支持 |
LONGTEXT | DataTypeWithBLOBs.String | LONGVARCHAR | 不支持 | 不支持 |
DATE | Date | DATE | 支持 | 不支持 |
TIME | Date | TIME | 支持 | 不支持 |
YEAR | Date | DATE | 不支持 | 不支持 |
DATETIME | Date | TIMESTAMP | 支持 | 不支持 |
TIMESTAMP | Date | TIMESTAMP | 支持 | 不支持 |
以下是商业数据库的。
postgresql/lightdb | java.sql.Types 值 | Java 类型 | IBM DB2 | Oracle | Sybase | SQL | Informix |
int8 | BIGINT | java.lang.long | BIGINT | NUMBER (38, 0) | BIGINT | BIGINT | INT8 |
| BINARY | byte[] | CHAR FOR BIT DATA | RAW | BINARY | IMAGE | BYTE |
| BIT | java.lang.Boolean | N/A | BIT | BIT | BIT | BIT |
bytea/blob | BLOB | byte[] | BLOB | BLOB | BLOB | BLOB | BLOB |
bpchar/char | CHAR | java.lang.String | CHAR, GRAPHIC | CHAR | CHAR | CHAR | CHAR |
text | CLOB | java.lang.String | CLOB, DBCLOB | CLOB | CLOB | CLOB | CLOB |
| DATE | java.sql.Date | DATE | DATE | DATE | DATE | DATE |
| DECIMAL | java.math.BigDecimal | DECIMAL | NUMBER | DECIMAL, MONEY, SMALLMONEY | DECIMAL | DECIMAL |
| DOUBLE | java.lang.Double | DOUBLE | DOUBLE PRECISION | DOUBLE PRECISION | DOUBLE PRECISION | DOUBLE PRECISION |
| FLOAT | java.lang.Double | FLOAT | FLOAT | FLOAT | FLOAT | FLOAT |
int4 | INTEGER | java.lang.Integer | INTEGER | INTEGER | INT | INTEGER | INTEGER |
| JAVA_OBJECT | java.lang.Object | JAVA_OBJECT | JAVA_OBJECT | JAVA_OBJECT | JAVA_OBJECT | OPAQUE |
bytea | LONGVARBINARY | byte[] | LONG VARCHAR FOR BIT DATA | LONG RAW | IMAGE | IMAGE | BYTE |
TEXT | LONGVARCHAR | java.lang.String | LONG VARCHAR, LONG VARGRAPHIC | LONG | TEXT | TEXT | TEXT |
number/numeric | NUMERIC | java.math.BigDecimal | NUMERIC | NUMBER | NUMERIC | NUMERIC | NUMERIC |
| OTHER | java.lang.Object | OTHER | OTHER | OTHER | OTHER | OTHER |
| REAL | java.lang.Float | REAL | REAL | REAL | REAL | REAL |
int2 | SMALLINT | java.lang.Integer | SMALLINT | SMALLINT | SMALLINT | SMALLINT | SMALLINT |
time | TIME | java.sql.Time | TIME | 无对应,pg time无日期部分,且不支持0日期,所以无法计算合理值。 | TIME | TIME | DATETIME HOUR TO SECOND |
timestamp/datetime(sysdate) | TIMESTAMP | java.sql.Timestamp | TIMESTAMP | timestamp | DATETIME, SMALLDATETIME | DATETIME | DATETIME YEAR TO FRACTION (5) |
timestamptz pg的时区格式为+10 2022-07-05 21:08:53.598693+08 | | | | timestamp with time zone 需要注意的是,oracle的时区格式为+10:00 | | | |
| TINYINT | java.lang.Bute | SMALLINT | TINYINT | TINYINT | TINYINT | TINYINT |
| VARBINARY | byte[] | VARCHAR FOR BIT DATA | RAW | VARBINARY | IMAGE | BYTE |
varchar/varchar2/text | VARCHAR | java.lang.String | VARCHAR, VARGRAPHIC | VARCHAR | VARCHAR | VARCHAR | VARCHAR |
Oracle ResultSetMetaData getPrecision/getScale有一个bug,count(*) as xxx、abs(col) as xxx,这样xxx是无法返回正确的Scale和Precision的,要想这些情况下返回正确的值,需要使用明确的cast(xxx as datatype)。参见https://stackoverflow.com/questions/1410267/oracle-resultsetmetadata-getprecision-getscale