一、MySQL 数据类型
1、整数类型:5 种
包含 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
须要思考存储空间和数据可靠性均衡的问题
2、浮点数和定点数类型
浮点数类型包含 FLOAT、DOUBLE、REAL,不准确;
- FLOAT 示意单精度浮点数;
- DOUBLE 示意双精度浮点数;
- REAL 默认就是 DOUBLE。如果你把 SQL 模式设定为启用“REAL_AS_FLOAT”,那么,MySQL 就认为 REAL 是 FLOAT。如果要启用“REAL_AS_FLOAT”,就能够通过以下 SQL 语句实现:
SET sql_mode =“REAL_AS_FLOAT”;
其中 FLOAT 占用字节数少,取值范畴小,DOUBLE 占用字节多,取值范畴大;
定点数类型(DECIMAL),是 准确 的数据类型
1. 它是把十进制数的整数局部和小数局部拆开,别离转换成十六进制数,进行存储。这样,所有的数值,就都能够精准表白了,不会存在因为无奈表白而损失精度的问题。
2.MySQL 用 DECIMAL(M,D)的形式示意高精度小数。其中,M 示意整数局部加小数局部,一共有多少位,M<=65。D 示意小数局部位数,D
简略小结浮点数和定点数的特点:浮点类型取值范畴大,然而不精准,实用于须要取值范畴大,又能够容忍渺小误差的科学计算场景(比方计算化学、分子建模、流体动力学等);定点数类型取值范畴绝对小,然而精准,没有误差,适宜于对精度要求极高的场景(比方波及金额计算的场景)。
3、文本类型
包含 TEXT、CHAR、VARCHAR、ENUM、SET,区别如下:
- CHAR(M):固定长度字符串。CHAR(M) 类型必须事后定义字符串长度。如果太短,数据可能会超出范围;如果太长,又节约存储空间;
- VARCHAR(M):可变长度字符串。VARCHAR(M) 也须要事后晓得字符串的最大长度,不过只有不超过这个最大长度,具体存储的时候,是依照理论字符串长度存储的;
- TEXT:字符串。零碎主动依照理论长度存储,不须要事后定义长度;
- ENUM:枚举类型,取值必须是事后设定的一组字符串值范畴之内的一个,必须要晓得字符串所有可能的取值;
- SET:是一个字符串对象,取值必须是在事后设定的字符串值范畴之内的 0 个或多个,也必须晓得字符串所有可能的取值。
其中 TEXT 类型也有 4 种,它们的区别就是最大长度不同:
- TINYTEXT:255 字符(这里假如字符是 ASCII 码,一个字符占用一个字节,下同);
- TEXT:65535 字符;
- MEDIUMTEXT:16777215 字符;
- LONGTEXT:4294967295 字符(相当于 4GB)。
留神:
1.TEXT 也有一个问题:因为理论存储的长度不确定,MySQL 不容许 TEXT 类型的字段做主键,遇到这种状况,你只能采纳 CHAR(M),或者 VARCHAR(M)。
2. 在我的项目中,只有不是主键字段,就能够依照数据可能的最大长度,抉择这几种 TEXT 类型中的的一种,作为存储字符串的数据类型。
4、日期与工夫类型
包含:YEAR、TIME、DATE、DATETIME、TIMESTAMP,
1. 用得最多的日期工夫类型是 DATETIME,因为尽管 DATETIME 类型占用的存储空间最多,然而它表白的工夫最为残缺,取值范畴也最大。
对于 MySQL 定义表字段类型时的倡议:
- 整数:INT
- 小数:DECIMAL
- 字符串:TEXT
- 日期与工夫:DATETIME
不过,凡事都是有两面的,可靠性好,并不意味着高效,比方,TEXT 尽管使用方便,然而效率不如 CHAR(M) 和 VARCHAR(M)。