Mysql中int与Java数据类型对应关系
1. mysql中int(11)和varchar(32) 括号中的数字代表的含义是一样的么 ?
- 答:长度解释 其实是不一样的.int(1),int(4),int(11) 在磁盘上都是占用 4 btyes 的存储空间.
关于mysql数据库中,字段长度的一个解释,一直以为int长度为1时,只能插入0-9的数字,发现完全不是,具体如下:
1、varchar类型的长度是指这个字段的字符(字母或汉字)个数。
2、数字类型的长度不是这个意思:
(1)int类型 INT(M),M代表的是显示宽度,长度的设定值范围1255(设置0时自动转为11,不设置时自动转为默认的11)(显示宽度),在此范围内任意长度值的字段值范围都是-21474836482147483647(即-2³¹-1~2³¹-1)
(2)tinyint类型:长度设定值范围1255(设置0时自动转为4,不设置时自动转为默认的4)(显示宽度),在此范围内任意长度值的字段值范围都是-128127(-2⁷-1~2⁷-1)
也就是说:int(1)、int(4)、int(11)和int(110)表示意思是一样的。
要查看出不同效果记得在创建类型的时候加 zerofill这个值(INT(M) ZEROFILL),表示用0填充,否则看不出效果的
-
mysql使用整数数据的精确数字数据类型。
数据类型 长度 位数 范围 默认值 tinyint 1Byte 8 2^7-1(255) 0 smallint 2Byte 16 -2^15 (-32,768) 到 2^15 – 1 (32,767) 0 int 4Byte 32 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 0 bigint 8Byte 64 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 0 -
java 基本类型
数据类型 | 长度 | 位数 | 默认值 |
---|---|---|---|
byte | 1Byte | 8 | 0 |
short | 2Byte | 16 | 0 |
int | 4Byte | 32 | 0 |
long | 8Byte | 64 | 0 |
float | 4Byte | 32 | 0.0f |
double | 8Byte | 64 | 0.0d |
boolean | - | - | false |
2.mysql 中tinyint(1)使用场景
- Mysql中,如果使用tinyint(1)来设置表中字段的数据类型,可以存储0和1;在Java中使用Boolean来接收,0映射为false,1映射为true。
- Mysql中,如果使用tinyint来设置字段的数据类型,映射到Java数据类型中,不仅可以使用上面的Boolean类型来接收,也可以使用Java中int类型来接收。在MySQL中存储的tinyint(1)类型数据,不仅可以存储0和1,任意一个一位自然数都可以(0-9)。不过,当这样(tinyint(1))使用时,0映射为Java中的Boolean类型false,1-9数字都将映射为true。
- tinyint(1)与tinyint(4)的区别:tinyint默认的位数是4位,但是我们设计数据库就算设置成tinyint(1)[(1)表示数据以一个长度来显示],但也不能影响它实际占了4个存储空间。tinyint(1) 和 tinyint(4)中的1和4只有字段指定zerofill(零填充)时才有效,不足位数用0来填充。其实他们的存储空间大小是一样的。如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。
3. 非0和1存储场景:
字段:status(值为1,2,3,4)
类型:tinyint 长度:1(有符号的)
实际结果:查询出来的数据列表,状态值不管是1、2、3还是4,都是"boolean true"
期望结果:单纯的查询出数据列表取出数字。
-
问题分析:
由于MySql中没有boolean类型,所以会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1] -
解决方式:
tinyint类型长度设置问题,当我把长度改成4时,查询结果就是我的期望结果了。 -
其他思路:
在不改变类型长度下,修改查询sql语句,在需要执行的sql语句中,把这个状态字段1,结果就会得到数据库存的值了(ps:要给这个修改后的状态字段加别名,不然查询出来的就是status1 => ‘1’) -
只存储0和1,表示true或false,则使用tinyint(1)
存储状态信息1、2、3、4等,为使查询出的数据是原始的数字,有两种方式:
A、修改tinyint类型的长度,使用tinyint(4)
B、在查询的sql语句上面做修改
所以由这里可以看出,当使用tinyint(1)来存储超过0,1两个以外的值,比如存储2,那这个2就是脏数据。如果要2有效,就用tinyint(4)。tinyint(1)只适用于存储0和1两个值,也即真和假,true和false。
一般情况,如果存的是纯数字的话,建议用tinyint,如果是字符串,且是固定长度的,建议用char。
- bit & tinyint:
两者都可以表示Java中的布尔值。
如果没有扩展需求,仅仅表示逻辑true或false的话,bit是首选;
如果有扩展需求,以后可能不仅仅是逻辑布尔两个值的话,就用tinyint(4)(长度根据业务来调整)。
共同学习,写下你的评论
评论加载中...
作者其他优质文章