MySQL数据类型
- 整数类型:
bit、bool、tinyint、smallint、mediumint、int、bigint
- 浮点数类型:
float、double、decimal
- 字符串类型:
char、varchar、tinyblob、blob、mediumblob、longblob、tinytext、text、mediumtext、longtext
- 日期类型:
Date、DateTime、TimeStamp、Time、Year
mysql数据类型与JAVA对应关系
| MySQL 数据类型 | Java 数据类型 | 备注 |
|---|
| INT, SMALLINT | int, Integer | 整数类型 |
| BIGINT | long, Long | 长整数类型 |
| FLOAT | float, Float | 单精度浮点数 |
| DOUBLE | double, Double | 双精度浮点数 |
| DECIMAL(p,s) | BigDecimal | 高精度小数,p表示总位数,s表示小数位数 |
| CHAR(n) | String | 定长字符串,n表示长度 |
| VARCHAR(n) | String | 变长字符串,n表示最大长度 |
| TEXT | String | 大文本,适合存储较长文本内容 |
| BLOB | byte[], InputStream | 二进制大对象,适合存储图片、文件等 |
| DATE | LocalDate | 日期类型,不包含时间 |
| TIME | LocalTime | 时间类型,不包含日期 |
| DATETIME | LocalDateTime | 日期和时间类型 |
| TIMESTAMP | Instant, LocalDateTime | 带时区的日期时间类型,具体取决于JDK版本 |
| BOOLEAN | boolean, Boolean | 布尔类型 |
| BIT | boolean, Boolean | 单个二进制位,通常表示布尔值 |
| BINARY(n) | byte[], ByteArrayInputStream | 固定长度的二进制数据 |
| VARBINARY(n) | byte[], ByteArrayInputStream | 可变长度的二进制数据 |
| ENUM | String | 枚举类型,对应String |
| SET | String | 集合类型,对应String |
| JSON | String, Map, List | JSON数据类型,可以使用第三方库进行解析 |
备注:
- 包装类与基本类型:MySQL中的数值类型通常对应Java中的基本类型(如int, double)及其包装类(如Integer, Double)。
- 时间类型:根据JDK版本不同,可以选择使用
LocalDateTime或Instant来处理TIMESTAMP类型。LocalDateTime不带时区,而Instant带时区信息。
- 二进制类型:对于BLOB和BINARY类型,通常使用
byte[]或InputStream来处理二进制数据。
- JSON类型:可以使用Java中的
String类型来存储,或者使用第三方库(如Jackson、Gson)将其解析为Java对象。
- 枚举和集合类型:MySQL中的
ENUM和SET类型通常对应Java中的String类型,具体使用方式取决于业务需求。
数据类型选择建议
- 选小不选大:一般情况下选择可以正确存储数据的最小数据类型,越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小;
- 简单就好:简单的数据类型的操作通常需要更少的CPU周期,例如:整型比字符操作代价要小得多,因为字符集和校对规则(排序规则)使字符比整型比较更加复杂;
- 尽量避免NULL:尽量制定列为
NOT NULL,除非真的需要NULL类型的值,有NULL的列值会使得索引、索引统计和值比较更加复杂;
- 浮点类型的建议统一选择
**decimal**;
- 记录时间的建议使用
**int**或者**bigint**类型,将时间转换为时间戳格式,如将时间转换为秒、毫秒,进行存储,方便走索引。