MySQL-数据类型

1、MySQL数据类型

一、整数类型:5种
包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
须要考虑存储空间和数据可靠性平衡的问题
image.pngsql

二、浮点数和定点数类型
浮点数类型包括FLOAT、DOUBLE、REAL不精确spa

  • FLOAT 表示单精度浮点数;
  • DOUBLE 表示双精度浮点数;
  • REAL 默认就是 DOUBLE。若是你把 SQL 模式设定为启用“REAL_AS_FLOAT”,那么,MySQL 就认为 REAL 是 FLOAT。若是要启用“REAL_AS_FLOAT”,就能够经过如下 SQL 语句实现:
SET sql_mode = “REAL_AS_FLOAT”;

其中FLOAT占用字节数少,取值范围小,DOUBLE占用字节多,取值范围大;
image.pngcode

定点数类型(DECIMAL),是精确的数据类型
1.它是把十进制数的整数部分和小数部分拆开,分别转换成十六进制数,进行存储。这样,全部的数值,就均可以精准表达了,不会存在由于没法表达而损失精度的问题。
2.MySQL 用 DECIMAL(M,D)的方式表示高精度小数。其中,M 表示整数部分加小数部分,一共有多少位,M<=65。D 表示小数部分位数,D对象

简单小结浮点数和定点数的特色:浮点类型取值范围大,可是不精准,适用于须要取值范围大,又能够容忍微小偏差的科学计算场景(好比计算化学、分子建模、流体动力学等);定点数类型取值范围相对小,可是精准,没有偏差,适合于对精度要求极高的场景(好比涉及金额计算的场景)。blog

三、文本类型
包括TEXT、CHAR、VARCHAR、ENUM、SET,区别以下:字符串

  • CHAR(M):固定长度字符串。CHAR(M) 类型必须预先定义字符串长度。若是过短,数据可能会超出范围;若是太长,又浪费存储空间;
  • VARCHAR(M): 可变长度字符串。VARCHAR(M) 也须要预先知道字符串的最大长度,不过只要不超过这个最大长度,具体存储的时候,是按照实际字符串长度存储的;
  • TEXT:字符串。系统自动按照实际长度存储,不须要预先定义长度;
  • ENUM: 枚举类型,取值必须是预先设定的一组字符串值范围以内的一个,必需要知道字符串全部可能的取值;
  • SET:是一个字符串对象,取值必须是在预先设定的字符串值范围以内的 0 个或多个,也必须知道字符串全部可能的取值。

其中TEXT 类型也有 4 种,它们的区别就是最大长度不一样:it

  • TINYTEXT:255 字符(这里假设字符是 ASCII 码,一个字符占用一个字节,下同);
  • TEXT: 65535 字符;
  • MEDIUMTEXT:16777215 字符;
  • LONGTEXT: 4294967295 字符(至关于 4GB)。

注意:
1.TEXT 也有一个问题:因为实际存储的长度不肯定,MySQL 不容许 TEXT 类型的字段作主键,遇到这种状况,你只能采用 CHAR(M),或者 VARCHAR(M)。
2.在项目中,只要不是主键字段,就能够按照数据可能的最大长度,选择这几种 TEXT 类型中的的一种,做为存储字符串的数据类型。class

四、日期与时间类型
包括:YEAR、TIME、DATE、DATETIME、TIMESTAMP
1.用得最多的日期时间类型是 DATETIME,由于虽然DATETIME 类型占用的存储空间最多,可是它表达的时间最为完整,取值范围也最大。
image.png效率

关于MySQL定义表字段类型时的建议:数据类型

  • 整数:INT
  • 小数:DECIMAL
  • 字符串:TEXT
  • 日期与时间:DATETIME

不过,凡事都是有两面的,可靠性好,并不意味着高效,好比,TEXT 虽然使用方便,可是效率不如 CHAR(M) 和 VARCHAR(M)。

相关文章
相关标签/搜索