Java数据类型和MySql数据类型对应表

java mysql 数据类型对照

类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述
      
VARCHARL+NVARCHARjava.lang.String12 
CHARNCHARjava.lang.String1 
BLOBL+NBLOBjava.lang.byte[]-4 
TEXT65535VARCHARjava.lang.String-1 
      
INTEGER4INTEGER UNSIGNEDjava.lang.Long4 
TINYINT3TINYINT UNSIGNEDjava.lang.Integer-6 
SMALLINT5SMALLINT UNSIGNEDjava.lang.Integer5 
MEDIUMINT8MEDIUMINT UNSIGNEDjava.lang.Integer4 
BIT1BITjava.lang.Boolean-7 
BIGINT20BIGINT UNSIGNEDjava.math.BigInteger-5 
FLOAT4+8FLOATjava.lang.Float7 
DOUBLE22DOUBLEjava.lang.Double8 
DECIMAL11DECIMALjava.math.BigDecimal3 
BOOLEAN1同TINYINT   
      
ID11PK (INTEGER UNSIGNED)java.lang.Long4 
      
DATE10DATEjava.sql.Date91 
TIME8TIMEjava.sql.Time92 
DATETIME19DATETIMEjava.sql.Timestamp93 
TIMESTAMP19TIMESTAMPjava.sql.Timestamp93 
YEAR4YEARjava.sql.Date91





对于bolb,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组。

对于boolen类型,在mysql数据库中,个人认为用int类型代替较好,对bit操作不是很方便,尤其是在具有web页面开发的项目中,表示0/1,对应java类型的Integer较好。
<think>嗯,用户想知道Java数据类型MySQL数据类型之间的映射关系。首先,我需要回顾一下常见的Java数据类型,比如int、long、String、Date这些,然后对应MySQL的字段类型,比如INT、BIGINT、VARCHAR、DATETIME等等。 记得之前看到过,MySQL的INT类型对应Java的Integer或者int,但如果有无符号的情况,可能需要用Long来处理,因为无符号INT的范围超过了Java的int最大值。比如MySQL的INT UNSIGNED范围是0到4294967295,而Java的int只能到2147483647,所以这时候得用long类型。这点需要特别注意,用户可能在实际开发中遇到类型不匹配的问题,比如在ORM框架如MyBatis或Hibernate中,可能会抛出数据溢出异常。 然后,VARCHARCHAR类型在Java中通常对应String,这个比较直接。日期类型的话,Javajava.util.Date或者java.time.LocalDateTime对应MySQL的DATETIME或TIMESTAMP。不过要注意时区的问题,TIMESTAMP会考虑时区,而DATETIME不会。 浮点数方面,Java的floatdouble对应MySQL的FLOATDOUBLE。对于高精度计算,比如货币,应该用DECIMAL,对应JavaBigDecimal,避免精度丢失。 还有BLOBTEXT类型,BLOB存储二进制数据,对应Java的byte[],而TEXT存储大文本,用String处理。布尔类型在MySQL中可以用TINYINT(1),对应Java的Boolean或者boolean,01示真假。 需要提醒用户注意无符号类型的处理,特别是在使用ORM框架时,可能需要额外配置,比如在MyBatis中指定jdbcType,或者在实体类中使用更大的类型来容纳无符号数值。此外,数据导入导出时,比如从Excel导入MySQL,也要确保类型匹配,避免转换错误。 用户可能在实际项目中遇到的具体问题,比如Excel中的数字列如果超过Java int的范围,导入到MySQL的无符号INT字段时,应该用Java的Long类型来接收。还有日期格式的转换,确保Excel中的日期格式与MySQL的DATETIME格式一致,避免解析错误。 总结一下,要给出一个清晰的对应表格,涵盖常用类型,并标注注意事项,特别是无符号处理、精度问题、日期时间类型二进制数据。此外,引用相关的参考资料,帮助用户进一步查阅官方文档或解决常见问题。</think>### Java数据类型MySQL数据类型映射关系 Java数据类型MySQL字段类型的正确映射对数据存储程序稳定性至关重要。以下是常见类型的对应关系及注意事项: #### 一、基本类型映射 | **MySQL字段类型** | **Java数据类型** | **范围说明** | |-------------------------|-----------------------------|-----------------------------------------------------------------------------| | `INT` | `int`/`Integer` | 有符号范围:$-2^{31}$ 至 $2^{31}-1$ | | `INT UNSIGNED` | `long`/`Long` | 无符号范围:$0$ 至 $2^{32}-1$(需显式处理无符号类型)[^2] | | `BIGINT` | `long`/`Long` | 有符号范围:$-2^{63}$ 至 $2^{63}-1$ | | `BIGINT UNSIGNED` | `BigInteger` | 无符号范围:$0$ 至 $2^{64}-1$(超出`Long`范围时需特殊处理)[^4] | | `VARCHAR(n)`/`CHAR(n)` | `String` | 字符串类型,需注意编码长度限制 | | `DECIMAL(m,n)` | `BigDecimal` | 高精度计算场景(如金额),避免使用`double` | | `FLOAT`/`DOUBLE` | `float`/`Float`或`double`/`Double` | 浮点数存在精度丢失风险 | | `DATETIME`/`TIMESTAMP` | `java.util.Date`或`java.time.LocalDateTime` | 时区处理需注意[^3] | | `TINYINT(1)` | `boolean`/`Boolean` | 通常用于布尔类型(0=false,1=true) | | `BLOB` | `byte[]` | 二进制大对象 | #### 二、关键注意事项 1. **无符号类型处理** MySQL的无符号整型(如`INT UNSIGNED`)在Java中需使用更大范围的数据类型,例如: - `INT UNSIGNED` → `Long`(范围:$0$ 至 $4,294,967,295$) - `BIGINT UNSIGNED` → `BigInteger`(范围:$0$ 至 $18,446,744,073,709,551,615$)[^2] 2. **精度控制** `DECIMAL(10,2)`对应金额存储时,必须使用`BigDecimal`避免浮点误差: ```java BigDecimal price = resultSet.getBigDecimal("price"); ``` 3. **日期类型映射** - `DATETIME`:不涉及时区(例如:`2023-01-01 12:00:00`) - `TIMESTAMP`:自动转换为UTC时间存储(需注意时区配置)[^3] 4. **布尔值处理** 建议显式定义字段为`TINYINT(1)`,避免使用`BIT`类型: ```sql ALTER TABLE user ADD is_active TINYINT(1) DEFAULT 0; ``` #### 三、ORM框架中的配置示例(MyBatis) ```xml <resultMap id="UserMap" type="User"> <result column="unsigned_int_col" property="unsignedInt" jdbcType="BIGINT"/> <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/> </resultMap> ``` #### 四、数据导入场景 当从Excel导入数据到MySQL时(如10万条记录),需确保: 1. Excel中的数值列与MySQL字段范围匹配 2. 日期格式统一(建议使用`yyyy-MM-dd HH:mm:ss`) 3. 字符串编码一致(如UTF-8)[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值