Mysql数据类型

在这里插入图片描述

红不,火不,愿你我都拥有红火生活

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
其他数据类型:暂不介绍,用的比较少。

一、整数类型

在这里插入图片描述
上面的(n)我们在可选的范围可以规定他的大小,默认的都是有符号类型,无符号需要加上unsigned;
单纯的想是不是头发又少了一根,那怎么能行,看小王的表现:

有符号类型:

mysql> create table demo1(id int);
Query OK, 0 rows affected

mysql> insert into demo1 values (-pow(2,10)),(pow(2,10));
Query OK, 2 rows affected
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from demo1;
+-------+
| id    |
+-------+
| -1024 |
|  1024 |
+-------+
2 rows in set

mysql> insert into demo1 values (pow(2,31));
1264 - Out of range value for column 'id' at row 1
mysql> 

我们这里的id是有符号类型的,最后一条演示的异常显然是超出范围了。但是咱们能给负数一些生存的空间不是。

无符号类型:

mysql> create table demo2( id int unsigned );
Query OK, 0 rows affected

mysql> insert into demo2 values(-1);
1264 - Out of range value for column 'id' at row 1
mysql> insert into demo2 values(pow(2,32));
1264 - Out of range value for column 'id' at row 1
mysql> insert into demo2 values(pow(2,32)-1);
Query OK, 1 row affected

mysql> select * from demo2;
+------------+
| id         |
+------------+
| 4294967295 |
+------------+
1 row in set

mysql> 

无符号的是从0开始的,所以我们是不能直接存负数的,其他自己悟。
在这里插入图片描述

类型(n)说明

无论n等于多少,int类型的永远占4个字节;
N表示的是显示宽度,不足的用0补足,超过的无视长度而直接显示整个数字,但这要整型设置了unsigned zerofill才有效;

二、浮点类型

在这里插入图片描述
float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型。
浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度。
float和double在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。
是不是有点懵呀
在这里插入图片描述

mysql> create table demo3(a float(5,2),b double(5,2),c decimal(5,2));
Query OK, 0 rows affected

mysql> insert into demo3 values (1,1,1),(2.1,2.1,2.1),(3.123,3.123,3.123), (4.125,4.125,4.125),(5.115,5.115,5.115),(6.126,6.126,6.126),(7.116,7.116,7.116), (8.1151,8.1151,8.1151),(9.1251,9.1251,9.1251),(10.11501,10.11501,10.11501), (11.12501,11.12501,11.12501); 
Query OK, 11 rows affected
Records: 11  Duplicates: 0  Warnings: 9

mysql> select * from demo3;
+-------+-------+-------+
| a     | b     | c     |
+-------+-------+-------+
|     1 |     1 | 1     |
|   2.1 |   2.1 | 2.1   |
|  3.12 |  3.12 | 3.12  |
|  4.12 |  4.12 | 4.13  |
|  5.12 |  5.12 | 5.12  |
|  6.13 |  6.13 | 6.13  |
|  7.12 |  7.12 | 7.12  |
|  8.12 |  8.12 | 8.12  |
|  9.13 |  9.13 | 9.13  |
| 10.12 | 10.12 | 10.12 |
| 11.13 | 11.13 | 11.13 |
+-------+-------+-------+
11 rows in set

看出点啥没

decimal采用的是四舍五入原则
float和double采用的是四舍六入五成双原则

关于财务系统,设计数据库的时候一定要注意字段类型的选择,以及根据实际情况精度的设置,这个是一个非常严肃的问题。
这里的decimal数据库字段类型可以对应一个适用于商业应用的java类型–BigDecimal类型;
毕竟float和double都是浮点数,但是我们的计算机是二进制的,浮点数会失去一定的精度。
有人可能会问,为啥会失去精度?

十进制数的二进制表示形式可能不准确;
使用的数字之间类型不匹配(float和double混合使用)

举个例子:

public class Test {
    public static void main(String[] args) {
        System.out.println("1.0-0.42="+(1.0-0.42));
        System.out.println("(0.1+0.42) = " + ((double)0.1+(float)0.42));
    }
}

会如你所愿吗(现实和理想的差距是有的,光想不现实)
在这里插入图片描述在这里插入图片描述
买了10块钱的基金,本来能赚1毛钱的,结果你给我算没了,一天的饭钱没了,你愿意吗?

上面还有一个新奇的规则四舍六入五成双

就是5以下舍弃5以上进位,如果需要处理数字为5的时候,需要看5后面是否还有不为0的任何数
字,如果有,则直接进位,如果没有,需要看5前面的数字,若是奇数则进位,若是偶数则将5舍 掉

这里是有坑的,别问我为啥知道(/(ㄒoㄒ)/~~)

三、日期类型

在这里插入图片描述
如果你想要表示年月日,建议DATE;
如果你想要表示年月日时分秒,建议DATIME;
如果比经常插入或更新日期为当前的日期,建议TIMESTAMP;
当然在开发中,会有时间戳转换日期,注意一下;
(日期先这样,后面可能会继续补充)
在这里插入图片描述

字符串类型

在这里插入图片描述

char类型占用固定长度,可以存放一些固定长度的数据,比如说,你的富婆通讯录、身份证号、女朋友的生日等等

Mysql和Java类型的对应关系

在这里插入图片描述

数据类型选择

  • 选适当大小的类型(越小的数据类型占用磁盘、内存和CPU缓存更小,速度也就快一些);
  • 尽量避免NULL出现(在开发使用的时候会更加方便,尽量不要给自己制造麻烦)

总结

什么事,适度就好,做事不要太极端

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值