在MySQL中,数据类型可以大致分为整数类型、浮点类型、字符串类型、日期时间类型、布尔类型等。根据阿里巴巴Java开发手册的规范,以下是常用的数据类型及其使用场景,并标注了推荐使用的和不建议使用的类型。
1. 整数类型
推荐使用的类型:
- TINYINT、SMALLINT、INT、BIGINT:根据实际取值范围选择合适的数据类型,覆盖了大多数存储场景。
不建议使用的类型:
- MEDIUMINT:适用场景少,取值范围在大多数情况下并不合适。
【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint( 1表示是,0表示否)。
说明:任何字段如果为非负数,必须是unsigned。
正例:表达逻辑删除的字段名is_deleted,1表示删除,0表示未删除。
-- 《阿里巴巴Java开发手册》
2. 浮点类型
数据类型 | 占用空间 | 精度 | 使用场景 |
---|---|---|---|
FLOAT | 4 字节 | 7 位有效数字 | 非常小的精度要求(例如传感器数据、实验室测量数据) |
DOUBLE | 8 字节 | 15 位有效数字 | 需要高精度的数值计算(例如财务、科学计算) |
DECIMAL | 根据定义而定 | 高精度,定义具体位数 | 需要精确存储数值,例如货币计算 |
NUMERIC | 根据定义而定 | 同DECIMAL | DECIMAL的别名,常用于需要非常高精度的存储 |
推荐使用的类型:
- DECIMAL:适用于货币、财务计算等需要高精度的场景。
不建议使用的类型:
- FLOAT:由于精度有限,计算中容易产生误差,尤其是对于财务数据。
- DOUBLE:与FLOAT类似,虽然精度高于FLOAT,但仍不适合需要完全精确的计算。
3. 字符串类型
数据类型 | 占用空间 | 使用场景 |
---|---|---|
CHAR | 固定长度,最多255字节 | 存储长度固定的短文本(如性别、国家代码) |
VARCHAR | 可变长度,最多65,535字节 | 存储长度可变的文本(如姓名、描述信息) |
TINYTEXT | 最多255字节 | 短文本(如简短的留言、备注) |
TEXT | 最多65,535字节 | 中等长度的文本(如文章内容) |
MEDIUMTEXT | 最多16,777,215字节 | 大量文本(如长文章、博客内容) |
LONGTEXT | 最多4,294,967,295字节 | 超大量文本(如书籍、文档等) |
推荐使用的类型:
- VARCHAR:适合大多数文本数据,长度可变,效率高。
- TEXT:适合存储较长文本,例如描述字段等。
不建议使用的类型:
- CHAR:固定长度会浪费空间,只有在长度完全固定的情况下才使用。
4. 日期时间类型
数据类型 | 占用空间 | 取值范围/格式 | 使用场景 |
DATE | 3 字节 | 'YYYY-MM-DD' | 存储日期,不包含时间部分 |
TIME | 3 字节 | 'HH:MM:SS' | 存储时间,不包含日期部分 |
YEAR | 1 字节 | 'YYYY' | 存储年份 |
DATETIME | 8 字节 | 'YYYY-MM-DD HH:MM:SS' | 存储日期和时间组合 |
TIMESTAMP | 4 字节 | 'YYYY-MM-DD HH:MM:SS' | 存储日期时间,自动更新为当前时间 |
DATETIME(fsp) | 8 字节 | 'YYYY-MM-DD HH:MM:SS[.fraction]' | 存储日期和时间,支持微秒精度 |
TIMESTAMP(6) | 4 字节 | 'YYYY-MM-DD HH:MM:SS[.fraction]' | 存储日期时间,支持微秒精度 |
推荐使用的类型:
- DATETIME:适用于需要同时记录日期和时间的应用场景。
TIMESTAMP:适用于需要自动记录创建或修改时间的场景。
不建议使用的类型:
- DATE、TIME:仅当确实只需要存储日期或时间而不包含另一部分时使用。
YEAR:适用场景较少,除非特定需求。