尚硅谷之MySQL基础

第6章MySQL的数据类型

常用的数据类型有:

  • 整型(xxxint)
  • 位类型(bit)
  • 浮点型(float和double、real)
  • 定点数(decimal,numeric)
  • 日期时间类型(date,time,datetime,year)
  • 字符串(char,varchar,xxxtext)
  • 二进制数据(xxxBlob、xxbinary)
  • 枚举(enum)
  • 集合(set)

1、整数(xxxint)

整数类型

字节

最小值(有符号/无符号)

最大值(有符号/无符号)

TINYINT

1

-128/0

127/255

SMALLINT

2

-32768/0

32767/65535

MEDIUMINT

3

-8388608/0

8388607/1677215

INT、INTEGER

4

-2147483648/0

2147483647/4294967295

BIGINT

8

-9223372036854775808/0

9223372036854775807/18446744073709551615

 

整数列的可选属性有三个:

  • M: 宽度(在0填充的时候才有意义,否则不需要指定)
  • unsigned: 无符号类型(非负)
  • zerofill: 0填充,(如果某列是zerofill,那么默认就是无符号),如果指定了zerofill只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可

原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 bytes 的存储空间。

2、浮点型

对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节

  • MySQL允许使用非标准语法(其他数据库未必支持,因此如果设计到数据迁移,则最好不要这么用):FLOAT(M,D)或DOUBLE(M,D)。这里,(M,D)表示该值一共显示M位,其中D表示小数点后几位,M和D又称为精度和标度。例如,定义为FLOAT(5,2)的一个列可以显示为-999.99-999.99。M取值范围为0~255。D取值范围为0~30,同时必须<=M。
  • 如果存储时,整数部分超出了范围(如上面的例子中,添加数值为01),MySql就会报错,不允许存这样的值。如果存储时,小数点部分若超出范围,就分以下情况:若四舍五入后,整数部分没有超出范围,则只警告,但能成功操作并四舍五入删除多余的小数位后保存,例如在FLOAT(5,2)列内插入999.009,近似结果是999.01。若四舍五入后,整数部分超出范围,则MySql报错,并拒绝处理。如999.995和-999.995都会报错。
  • 说明:小数类型,也可以加unsigned,但是不会改变数据范围,例如:float(3,2) unsigned仍然只能表示0-9.99的范围。
  • float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示
  • REAL就是DOUBLE ,如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。

 

注意:在编程中,如果用到浮点数,要特别注意误差问题,因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。如果希望保证值比较准确,推荐使用定点数数据类型。