MySQL数据类型介绍

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
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无符号数的最大值为 2 8 次方减 1 ,也就是 255
,TINYINT有符号数的最大值为 2 7 次方减 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是可变程度,这两个的作用就是为了区分大小写          的,注意这两个是字节字符串。





















相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL 存储
【MySQL】——数据类型及字符集
【MySQL】——数据类型及字符集
165 0
【MySQL】——数据类型及字符集
|
2月前
|
机器学习/深度学习 存储 关系型数据库
MySQL数据库:常用数据类型
【2月更文挑战第7天】
29 0
|
3月前
|
SQL 关系型数据库 MySQL
学习MySQL,创建表,数据类型
学习MySQL,创建表,数据类型
|
3月前
|
设计模式 NoSQL Java
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
99 1
|
16天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
3月前
|
存储 SQL 关系型数据库
MySql中有哪些数据类型(数据库学习——三)
MySql中有哪些数据类型(数据库学习——三)
37 1
|
1月前
|
存储 JSON 关系型数据库
【mysql】—— 数据类型详解
【mysql】—— 数据类型详解
|
1月前
|
关系型数据库 MySQL
Mysql基础第四天,Mysql数据类型
Mysql基础第四天,Mysql数据类型
25 0
Mysql基础第四天,Mysql数据类型
|
2月前
|
存储 关系型数据库 MySQL