MySQL数据库之数据类型

本文详细介绍了MySQL数据库的主要数据类型,包括数值型、日期时间型和字符串型,并通过实例演示了如何使用这些数据类型,特别强调了decimal类型的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



MySQL数据库的数据类型主要是分为数值型,日期时间型以及字符串型这三个大类,看着很多觉得记不住很麻烦是不是,不用担心其实现在我们常用的就那么几个


整数型的 tinyint 和 bigint 

小数型的 decimal 

日期时间类型 datetime 和 timestamp 

字符串型是 char 和 varchar 




数值型



整数型



是否有符号,可在定义时使用unsigned标识,

如果没有,不写就认为是有符号。


我们直接上手试验一下

先把建表的语句写好





create table tb1_int(
 a tinyint unsigned,
 b tinyint
);

insert into tb1_int values(255, 127);
insert into tb1_int values(256, 128);
insert into tb1_int values(0, 128);


创建一个表向表中插入数据


第一条语句插入成功



整数型就验证这一个例子哈!


在这边给大家扩充一个小知识点!

 

zerofill

通过规定数据的显示宽度,达到统一显示的目的


语句:




alter table tb1_int add c tinyint(3) zerofill;

insert into tb1_int values(0, 127, 1);
insert into tb1_int values(0, 127, 5);
insert into tb1_int values(0, 127, 7);






alter table tb1_int add c tinyint(3) zerofill;

类型(M), M表示显示的最小宽度


效果:


java中的 boolean 类型, 在数据库中可以用 bit, tinyint(1),来存储  

0对应false 1 对应true


整数类型中最常用的是: 

tinyint , int 对应 java 中的 int

bigint 对应 java 中的 long 





小数类型




语句:

单精度

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

双精度

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

利用 M,D 控制数值范围;支持无符号;可以zerofill;


其中 M 表示总的位数,D 表示小数位数。此 M,D 可以控制保存的范围。

例:Float(10,2) -99999999.99 到 99999999.99

如果省略 M,D 会根据计算机硬件进行处理。

单精度,M大约为7左右

而双精度,M大约为15左右


科学计数法 

-3.402823466E+38 = -3.402823466 * 10^38

 

123.456 在磁盘上是如何存储的?

0.123456 * 10^3 实际上存储的是: 123456  3


这样存储会出现了精度的丢失。

我们来验证一下





create table num_1(
a float,
b double
);

insert into num_1 values(1234567890.0123456789, 1234567890.0123456789);






效果:

Float 精度为6位左右。 Double的精度为16位左右。


因为 float 和 double 会出现精度的丢失,所以在精确度要求高的场所用 decimal。

 

 

Decimal  定点数型   

定点数

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

其中M表示总的位数,D表示小数位数。此M,D可以控制保存的范围。

M,D省略,默认为10,0;





create table num_2(
  send_money decimal(6,2)
);

insert into num_2 values(9999.99);





效果: 



所以要是小伙伴们以后要存储一些涉及到钱的数据要记得 用Decimal 

 decimal 对应 java BigDecimal  java.math.BigDecimal 




日期时间类型




 


这边就不一一介绍了

Timestamp 时间戳:存储的时候是整型,显示的时候是日期类型

至于为什么时间戳的最大值是2038年小伙伴们自己去百度吧!蛮有意思的呢!






create table dt_1(
 a datetime,
 b timestamp
);

insert into dt_1 values('2017-11-04 19:20:00', now());





效果:



datetime 对应 Java Date




字符类型




 


blob 对应 java byte[]

enum 对应 java 里 Enum 枚举类型

set  对应 java里 set 类型

char varchar text : 对应 Java String


Char & varchar

CHAR 和 VARCHAR 类型声明的长度表示你想要保存的最大字符数。

Char(5)   Varchar(5)


Char :

定长字符串,保存时如果字符串长度不够,则后边补足空字符串;但是在读取到数据是,会截取后边所有的字符串。


Varchar :

变长字符串。在保存字符串时,同时保存该字符串的长度,小于255采用一个字节保存,否则采用二个字节保存。



text 就是储存长文本类型


char、varchar 和 text 总结:

经常变化的字段用 varchar

知道固定长度的用 char

超过255字符的只能用 varchar 或者 text

能用 varchar 的地方不用 text


我们再来看一下枚举类型 里面实际上存储的就是整形,例如我们规定存储 boy和 girl 里面实际存储的是1和2





create table s_8(
 gender enum('boy', 'girl')
);

insert into s_8 values('girl');
insert into s_8 values('boy');

insert into s_8 values('other');





效果:


在枚举类型中我们只能插入写好的内容


set是一个集合类型!





create table s_6(
 hobby set('A', 'B', 'C')
);

insert into s_6 values('A');

insert into s_6 values('B,C');





效果:

在 set 类型我们可以多选


blob 是存储的是二进制类型,图片 文件 视频 音频都可以用这个存储,但在实际应用中我们一般会把这些东西存在文件服务器中,所以用的很少,我们知道有这个就可以了!


设计数据类型要考量:

1.使用最精确的类型,占用最少的空间。

(现在考虑的少了因为磁盘便宜了)

2 还应该考虑到相关语言处理方便性。

像我们用得是 Java 语言,要考虑使用在Java中有对应类的类型

3 考虑移值的兼容性。

我们现在用 MySQL 来存储数据,万一要把数据移到 oracle 数据库呢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值