MySQL数据类型介绍

一、数据类型

    MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。

 

    数值数据类型

             整数类型:  TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT

             浮点数类型:FLOAT、DOUBLE

             定点小数:  DECIMAL

        日期/时间类型

              YEAR、TIME、DATE、DATETIME、TIMESTAMP

        字符串类型,其中字符串又可以分为文本字符串和二进制字符串

             文本字符串:

                  CHAR、VARCHAR、TEXT、ENUM、SET等   

             二进制字符串

                  BIT、BINARY、VARBINARY、BLOB

1、整数类型

     数值型数据类型主要用来存储数字,MySQL提供了多种数值数据类型,不同的数据类型提供不同的取值范围,可以存储的值的范围越大,其    所需要的存储空间也会越大。整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件。

 

MySQL中整型数据类型

MySQL数据类型介绍

 

       从表中可以看出,不同类型整数存储所需要的字节数是不一样的,占用字节数越多的的类型所能表示的数值范围越大。根据占用字节数可以求出每一种数据类型的取值范围,如:TINYINT需要1个字节(8bits)来存储,那么TINYINT无符号数的最大值为2的8次方减1,也就是255

,TINYINT有符号数的最大值为2的7次方减1,也就是127。其他类型的整数取值范围计算方法相同。

  

不同整数类型的取值范围

    MySQL数据类型介绍

 

       创建表的语句:

 MySQL数据类型介绍

 

        这个例子中TINYINT(4)、INT(11) 括号中的数字表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。这里要注意:

显示宽度和数据类型的取值范围是无关的,显示宽度只是指明MySQL最大可能显示的数字个数,注意是可能。通俗点讲就是,比如INT字段,显示宽度为4,但是如果你插入的数据大于4,达到了8,6666 6666,那也没关系,只要插入的数值的位数不超过该类型整数的取值范围,就行,如果插入的数值长度是2,或者3,数值的位数小于指定的宽度,后面的位数就会由空格填空,5555插入INT字段,存的就是"555  "后面用空格补齐。还有一点,这个显示宽度没限制,你写100度没问题,但是插入数据时,实际起控制作用的还是数据类型的取值范围。如果不写显示宽度,就会用系统默认的,比如,INT的默认显示宽度是11,看上面表,最高也就能表示

10位大小的数值,但是要注意,有符号的,也就是负数时,符号位也占一位。

 

2、浮点数类型和定点数类型

     MySQL中使用浮点数和定点数来表示小数。浮点类型有两种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)。定点类型只有一种:DECIMAL。浮点类型和顶点类型都可以用(M,N)来表示,其中M成为精度,表示总共的位数;N称为标度,是表示小数的位数。

 

MySQL中的小数类型

MySQL数据类型介绍

 

1、M,N表达的含义

          M:数值的总位数。 通俗点讲,就是看有多少个数字,比如,5.6789,M就是5

          D:小数点后面能保留几位。 比如上面的5.6789 ,D就是4。 这只是举一个例子,来说明M,D是什么,实际是先有M,D的,然后在来控制           数值,而不是更具数值来确定M,D。

          不单单就MECIMAL有M,D这两个参数,FLOAT 和 DOUBLE 也有,    

MySQL数据类型介绍

    

       分析:a1的M为3,D为1,那么小数点上必须是占了一位数字,就算没有值,也会用0来填充,所以说,整数位上最多就只能是2位,这里

  要切记要先根据D的值,来算整数位能最多有多少位。通过分析a1,a2和a3也就简单了,a2字段上的值,整数部分最多是2位,小数点后的位   数最多是3位,也就是说小数点后超过了3位,就会四舍五入。a3字段上的值,整数部分最多只能是一位,小数点后的位数最多是2位,如果       不足2位,也会用0补充。比如插入1.5,在数据库中存的就是1.50, 比如插入10.23,这个就会报错,因为整数部分只能是一位,小数点后的     位数已经占了2位了。

 

2、FLOAT、DOUBLE、DECIMAL三者的区别。

      都是用来表示我们所说的小数的也就是浮点数,但是三种的精度不一样,也就是后面显示的位数不一样,

      ①区别一:

                FLOAT显示后面的小数点位大概在40多位;

                DOUBLE能显示的就是300多位了,不是一个层次上的;

                DECIMAL这个小数点后面能显示的位数跟DOUBLE差不多。

      ②区别二:

               FLOAT和DOUBLE在不指定精度时,也就是不用(M,D),默认会按照实际的精度,也就是你写多少就是多少,而DECIMAL如不指定                精度默认为(10,0),也就是如果不指定精度,插入数值56.89,在数据库中存储的就是57。所以一般使用DECIMAL时就会指定精度,而              使用FLOAT和DOUBLE就不用。

      ③区别三:

               浮点数相对与定点数(DECIMAL)的优点就是在长度一定的情况下,浮点数能够表示更大的数据范围,但是缺点是会引起精度问题。

3、什么时候使用FLOAT、DOUBLE、DECIMAL

             对精度要求比较高的时候,比如货币、科学数据等,使用DECIMAL的类型比较好。其他的时候,看你要存放的数据的大小而定了,一             般使用DOUBLE。并且在使用浮点数时需要注意,尽量避免做浮点数的比较,比如加、减,谁大谁小,这样的操作,会引起精度缺失。            

3、日期与时间类型

       MySQL中也有许多表示日期的数据类型,主要有:DATATIME、DATE、TIMESTAMP、TIME、和YEAR。   

   MySQL数据类型介绍

 

4、文本字符串类型

       字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。MySQL支持两类字符型数据:文本字符串和二进制字符串。

 

文本字符串数据类型

 

 MySQL数据类型介绍

 

 

二进制字符串类型

MySQL数据类型介绍

 

二、如何选择数据类型

1、整数和浮点数

         如果不需要小数部分,则使用整数来保存数据,并且根据整数的大小,来选择合适的整数类型,如果需要小数部分,则使用浮点数类型,      浮点数类型中,有float和double,如果需要精度高一点,则选择double。根据自己的需求来决定选什么。

2、浮点数和定点数

        浮点数FLOAT、DOUBLE相对应定点数DECIMAL的优势在于:在长度一定的情况下,浮点数能表示更大的数据范围,但是浮点数容易产     生误差,因此在精度比较高时,建议使用DECIMAL,比如货币这一类东西,就用DECIMAL比较合理,注意浮点数在进行加减运算时也容       易出现问题。如果进行数值比较,也建议用DECIMAL

3、日期与时间类型

       可以看上面详解时的图,根据各种格式,选择自己所需要的数据类型,注意TIMESTAMP和DATETIME的区别,一个是跟时区有关,一个

    无关,其他没什么大的区别。

4、CHAR与VARCHAR之间的特点与选择

      区别:

           CHAR是固定长度字符、VARCHAR是可变长度字符。CHAR会自动删除插入数据的尾部空格,VARCHAR不会。 

          CHAR是固定长度,处理速度比VARCHAR更快,缺点很明显,浪费存储空间,所以对存储不大,但在速度上有要求的可以使用CHAR类       型,反之用VARCHAR。

5、ENUM和SET

        ENUM只能取单值,也就是从枚举类型中选取其中一个值,但是SET可以取多值,ENUM最多能存放65535个成员,SET只能65个空字符     串也能在SET中存储,要存储一个人的喜爱时,最好使用SET类型,其实最重要的是看具体的情况在选取最为合适的把

6、BLOB和TEXT

       BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息,BLOB主要存储图片、音频信息,而TEXT只能存储纯文         本文件。分清楚两者的用途

7、BINARY和VARBINARY

      这两个的区别和CHAR与VARCHAR的区别差不多,BINARY是固定长度、VARBINARY是可变程度,这两个的作用就是为了区分大小写          的,注意这两个是字节字符串。