MySQL基础回顾(三):数据库中的数据类型

一、数值类型

1.int型
在MySQL中int型是使用频率很高的类型,常用int类型来表示标准的整数,它的大小为四个字节。

在mysql的数据类型中是这样定义的:

整型类型(显示宽度)

所以int(3),这个3不是说最大保存3位数,而是最大显示宽度,比如int(1)可以插入1,11,1111或者更大的数。而int(3)分别插入2,20,200分别显示为002,020,200。所以整型的显示宽度仅仅用于显示补0。

2.float、double和decimal型
float和double属于浮点型,decimal属于定点型。
格式均为:

数据类型(M,D)

M:精度,表示数据的总长度;
D:标度,表示小数点后的长度;

关于他们的大小:
float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。

区别:
对于精度比较高的东西,比如money,我会用decimal类型,不会考虑float,double,因为他们容易产生误差。
float和double如果不写精度和标度,会按照实际精度值保存,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错。如果用flocat类型的去存与金额有关的数据的时候就会出现问题。decimail如果不写精度和标度,则按照默认值decimal(10,0)来操作,如果数据超过了精度和标度值,系统会报错。

3.不常用的数值类型

  • tinyint 类型,用来保存十分小的数据 ,占1个字节。
  • smallint 类型,用来保存较小的数据 ,占2个字节。
  • mediumint类型,用来保存中等大小的数据 ,占3个字节。
  • bigint类型,用来表示较大的数字 ,占8个字节 ,可以想象成Java中的long类型。

二、字符串类型

1.char和varchar类型
定义方式:

字符串类型(M)

在这里这个M是长度的意思,插入该列的字符串长度将不允许超过M所指定的长度。

大小:

  • char为定长字符,即系统一定会分配指定的空间用于存储数据。它长度取值在:0-255之间,一般不用这个。
  • varchar为可变字符串 ,指定长度之后,系统会根据实际存储的数据来计算长度,分配合适的长度(数据没有超出长度)。长度取值在0-65535之间 ,一般字符串类型都用这个,除了特别长的文章用text,一般都用varchar。

Char和varchar的区别
1、 char一定会使用指定的空间,varchar是根据数据来定空间
2、 char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算。
3.如果确定数据一定是占指定长度,那么使用char类型;如果不确定数据到底有多少,那么使用varchar类型。如果数据长度超过255个字符,不论是否固定长度,都会使用text,不再使用char和varchar。

2.其他字符串类型
文本类型:本质上mysql提供了两种文本类型,分别为Text和Blob。

二者区别:

  • Blob:二进制大对象,一个能够存放任何内容的容器,多达 4G。存储的是二进制串,比如:压缩数据、加密数据、图像和声音。一般都不会使用blob来存储文件本身,通常是使用一个链接来指向对应的文件本身。
  • Text:与 BLOB 有很多相似之处,但其存储的是非二进制串,如字符。

Text类型:
系统中提供的四种text

  • Tinytext:系统使用一个字节来保存,实际能够存储的数据为:2 ^ 8 + 1
  • Text:使用两个字节保存,实际存储为:2 ^ 16 + 2
  • Mediumtext:使用三个字节保存,实际存储为:2 ^ 24 + 3
  • Longtext:使用四个字节保存,实际存储为:2 ^ 32 + 4

三、时间和日期类型

MySQl中有五种表示日期和时间的数据类型。其中year类型表示时间,date类型表示日期,time类型表示时间,datetime和timestamp表示日期和时间。

1.year
year类型使用1个字节来表示年份,MySQL中以YYYY的形式来显示year类型的值。
关于year的使用有以下几点要注意:

  • 我们一般用year类型来表示年份,所以在对该字段进行相关操作的时候,最好使用4位字符串或者数字表示,不要使用2位的字符串和数字。
  • 有的时候可能会插入0或者‘0’。这里要严格区分0和‘0’,如果向year类型的字段插入0,存入该字段的年份是0000;如果向year类型的字段插入‘0’,存入的年份是2000。

2.date
date类型使用4个字节来表示日期。MySQL中是以YYYY-MM-DD的形式显示date类型的值。

其中,YYYY表示年,MM表示月,DD表示日。date类型的范围可以从‘1000-01-01’----‘9999-12-31’。

在MySQL中对于date类型的赋值格式不是很严格。

  • 标准的输入格式是‘YYYY-MM-DD’或‘YYYYMMDD’格式的字符串表示,这种方式可以表达的范围是‘1000-01-01’~‘9999-12-31’。‘3002-2-8‘,date类型将转换为3002-02-08;输入’30020308‘,date类型将转换为3002-03-08。
  • MySQL中还支持一些不严格的语法格式,任何标点都可以用来做间隔符。如’YYYY/MM/DD‘,’YYYY@MM@DD‘,’YYYY.MM.DD‘等分隔形式。举个例子,输入’2020.3.8‘,date类型将转换为2020-03-08。

小结:date类型值大小4个字节,如果只需要记录日期,选择date类型是最合适的。虽然MySQL支持的DATA类型的一些不严格的语法格式,但是,在实际应用中,最好还是选择标准形式。

3.time
time类型使用3个字节来表示时间。MySQL中以HH:MM:SS的形式显示Time类型的值。其中,HH表示时;MM表示分,取值范围为0-59;SS表示秒,取值范围是00–59。
Time类型的范围可以从‘-838:59:59’–‘838:59:59’。虽然,小时的范围是0~~23,但是为了表示某种特殊需要的时间间隔,将Time类型的范围扩大了。而且还支持了负值。

于Time类型的总结:
1,一个合法的Time值,如果超出了Time的范围,将被裁为范围最接近的端点。举个例子,‘880:00:00’将转换为838:59:59。
2.如果插入的Time值是无效的,系统会提示报错,即使这个无效值被插入到表中了,其值也会被转换为00:00:00。
3.Time类型专门用来存储时间数据,而且只占3个字节,所以如果只需要记录时间,选择Time类型是最合适的。

4.Datetime
datetime类型使用8个字节来表示日期和时间。MySQL中以‘YYYY-MM-DD HH:MM:SS’的形式来显示dateTime类型的值。
从其形式上可以看出,dateTime类型可以直接用date类型和Time类型组合而成。

与date类型很像,在MySQL中对于Datetime类型的赋值格式也不是很严格。

  • 标准格式:YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’格式的字符串表示。这种方式可以表达的范围是‘1000-01-01 00:00:00’~~‘9999-12-31 23:59:59’。比如我现在输入‘2008-08-08 08:08:08’,dateTime类型转换为2008-08-08 08:08:08,输入‘20080808080808’,同样转换为2008-08-08 08:08:08。
  • 不严格的格式:情况与date类型相同,而且时间部分也可以使用任意的分隔符隔开,这与Time类型不同,Time类型只能用‘:’隔开呢。举个例子,比如我现在输入‘2008@08@08 080808’,数据库中dateTime类型统一转换成2008-08-08 08:08:08。

小结:最常用的时间格式,如果需要同时记录日期和时间,选择dateTime类型是个很好的选择。

5.timestamp
timestamp类型使用4个字节来表示日期和时间。timestamp类型的范围是从1970-01-01 08:00:01~~2038-01-19 11:14:07。
MySQL中也是以‘YYYY-MM-DD HH:MM:SS’的形式显示timestamp类型的值。从其形式可以看出,timestamp类型与dateTime类型显示的格式是一样的。值得注意的是,timestamp类型范围比较小,没有dateTime类型的范围那么大。所以输入值时要保证在timestamp类型的有效范围内。

注意点:

  • timestamp类型还有一个很大的特殊点,就是时间是根据时区来显示的。同一时间在不同的时区插入,会根据时区显示不同的时间。
  • timestamp类型的范围很小,其最大时间为2038-01-19 11:14:07。如果插入时间的比这个大,将会出错。

所以需要的时间范围比较大时,还是选择dateTime类型比较安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值