Java对接MySQL字段类型应选INT UNSIGNED、VARCHAR(N)、DATETIME:整数优先UNSIGNED避免负数冗余;字符串默认VARCHAR按需设长,极短定长用CHAR;时间统一用DATETIME确保范围与时区安全。

Java 中对接 MySQL 时,字段类型选得准不准,直接关系到数据不丢、查询不慢、代码不翻车。关键不是“Java 能接上”,而是“MySQL 存得稳、算得准、查得快”。下面按最常用的三类讲清楚怎么选。
整数类型:优先用 INT UNSIGNED,别写 INT(11)
Java 的 int 对应 MySQL 的 INT,但必须加 UNSIGNED——除非业务真要存负数(比如温度、账务冲正)。用户 ID、订单号这类主键,只要预估不超过 42 亿,就用 INT UNSIGNED(0~4294967295),占 4 字节,兼容性好、索引效率高。
- 高频日志表或未来可能超 42 亿的 ID(如消息流水号)→ 改用
BIGINT UNSIGNED - 状态码、开关标志(0/1)、性别(1/2)→ 用
TINYINT UNSIGNED,1 字节足矣 - 绝对不要写
INT(11):括号里的 11 是显示宽度,不影响存储和取值,JDBC 和 Java 读写时完全无视它
字符串类型:VARCHAR 是默认选择,CHAR 只用于极短定长字段
Java 的 String 一律映射为 VARCHAR(N),N 按业务最大长度 +10% 余量设,比如用户名最长 32 字符,就设 VARCHAR(36)。盲目设 VARCHAR(255) 看似省事,实则拖慢索引、掩盖真实约束、浪费内存。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 国家代码(CN/US)、性别码(M/F)、订单状态(paid/shipped)→ 可用
CHAR(2)或CHAR(10),定长且极短,更新时更轻量 - 文章正文、JSON 内容、长描述 → 别塞进主表,拆到副表用
MEDIUMTEXT,主表只留外键 - 别用
TEXT做主键或建普通索引(前缀索引除外),它不支持全文索引以外的高效检索
时间类型:DATETIME 是首选,慎用 TIMESTAMP 和 INTEGER
Java 的 LocalDateTime 或 java.sql.Timestamp 应统一映射为 DATETIME。它范围宽(1000–9999 年)、无时区隐式转换、行为可预期。创建时间、更新时间、订单日期、生日等都用它。
立即学习“Java免费学习笔记(深入)”;
- 别用
TIMESTAMP:它自动转 UTC、依赖系统时区、2038 年会溢出,线上排查时区问题成本极高 - 避免用
INT存 Unix 时间戳:虽然省 4 字节,但丧失可读性、无法直接用 SQL 函数(如DATE_ADD),还得在 Java 层反复格式化 - 只要不涉及跨时区自动转换需求,
DATETIME就是最稳妥、最透明的选择

















