MySQL数据类型介绍

  1. 云栖社区>
  2. 博客>
  3. 正文

MySQL数据类型介绍

持续高温 发布时间:2018-01-07 18:26:38 浏览5386 评论0

摘要: MySQL数据类型介绍 一、数据类型     MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。       数值数据类型              整数类型:  TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT              浮点数...

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中整型数据类型
bd7f7750bd16062262f7e76ab5a43b3343e2bb83

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

       创建表的语句:
            652774e51ae4049d741ef2a336889e37179777d7

        这个例子中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中的小数类型
96949d0f8ed2bef1e8b9a6be6e9b84f4278157c6

1、M,N表达的含义
          M:数值的总位数。 通俗点讲,就是看有多少个数字,比如,5.6789,M就是5
          D:小数点后面能保留几位。 比如上面的5.6789 ,D就是4。 这只是举一个例子,来说明M,D是什么,实际是先有M,D的,然后在来控制           数值,而不是更具数值来确定M,D。
          不单单就MECIMAL有M,D这两个参数,FLOAT 和 DOUBLE 也有,比如:
         37d9e8ea89bea86f14be0b232da2ae9770c28991
    
       分析: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。
          
                      9347d69987e2a84f3f9f8e68c2957cf8cc9982f2

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

文本字符串数据类型

 d2105c62ab1715e276a8b056da680f107ef9125b


二进制字符串类型
56b6a245457eb8ebfb0b301a23ca91ca285bf00d

二、如何选择数据类型             
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是可变程度,这两个的作用就是为了区分大小写          的,注意这两个是字节字符串。





















【云栖快讯】云栖专辑 | 阿里开发者们的第20个感悟:好的工程师为人写代码,而不仅是为编译器  详情请点击

网友评论