写点什么

《MySQL 入门很轻松》第 4 章:数据表中存放的数据类型

作者:乌龟哥哥
  • 2022 年 8 月 15 日
    河北
  • 本文字数:1925 字

    阅读完需:约 6 分钟

MySQL 支持多种数据类型,大致可以分为三类,分别是数值类型、日期和时间类型、字符串(字符)类型。

1.1 数值类型

MySQL 支持所有标准 SQL 数值数据类型。这些类型包括严格数值数据类型(INTEGER,SMALLINT、TINYINT、MEDIUMINT 和 BIGINT),近似数值数据类型(FLOAT、REAL 和 DOUBLE),以及定点数类型(DECIMAL)。


注意:关键字 INT 是 INTEGER 的同义词,关键字 DEC 是 DECIMAL 的同义词.


MySQL 提供多种整数类型,不同的数据类型提供的取值范围不同,可以存储的值的范围越大,其所需要的存储空间也就越大,因此要根据实际需求选择适合的数据类型。


下图显示了每个整数类型的存储需求和取值范围。



MSQL 支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如 INT(4))。INT(M)中的 M 指示最大显示宽度,最大有效显示宽度是 4,需要注意的是,显示宽度与存储大小或类型包含的值的范围无关。

1.2 浮点数类型

现实生活中很多情况需要存储带有小数部分的数值,这就需要浮点数类型,如 FLOAT 和 DOUBLE。其中,FLOAT 为单精度浮点数类型;DOUBLE 为双精度浮点数类型。浮点数类型可以用(M,D)来表示,其中 M 称为精度,表示总共的位数;D 称为标度,表示小数的位数。下表显示了每个浮点数类型的存储需求和取值范围。



注意:M 和 D 在 FLOAT 和 DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。

1.3 定点数类型

MySQL 中,除使用浮点数类型表示小数外,还可以使用定点数表示小数,定点数类型只有一种:DECIMAL。定点数类型也可以用(M,D)来表示,其中 M 称为精度,表示总共的位数;D 称为标度,表示小数的位数。DECIMAL 的默认 D 值为 0,M 值为 10。下表显示了定点数类型的存储需求和取值范围。DECIMAL 类型不同干 FLOAT 和 DECIMAL, DECIMAL 实际是以字符串存储的.DECIMAL 的有效取值范围由 M 和 D 的值决定。如果改变 M 而固定 D,则其取值范围将随 M 的变大而变

1.4 日期和时间类型

MySQL 中,表示时间值的日期和时间类型为 DATETIME、DATA、TIMESTAMP,TIME 和 YEAR。例如,只需记录年份信息时,可以只用 YEAR 类型。每种类型都有合法的取值范围。


1.5 字符串类型

字符串类型用于存储字符串数据,MySQL 支持两类字符串数据:文本字符串和二进制字符串。文本字符串可以进行区分或不区分大小写的串比较,也可以进行模式匹配查找。MySQL 中字符串类型指的是 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT,ENUM 和 SET。下表列出了 MySQL 中的字符串数据类型。


1.6 数据类型选择

MySQL 提供了大量的数据类型,为了优化存储,提高数据库性能,在任何情况下均应使用最精确的类型,即在所有可以表示该列值的类型中,该类型使用的存储最少


  1. 整数和浮点数如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类型。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。例如,如果列的值的范围为 1~99999,若使用整数,则 MEDIUMINT UNSIGNED 是最好的类型;若需要存储小数,则使用 FLOAT 类型。浮点数类型包括 FLOAT 和 DOUBLE 类型。DOUBLE 类型精度比 FLOAT 类型高,因此,如要求存储精度较高时,应选择 DOUBLE 类型。

  2. 浮点数和定点数浮点数 FLOAT 和 DOUBLE 相对于定点数 DECIMAL 的优势是:在长度一定的情况下,浮点数能表示更大的数据范围。但是由于浮点数容易产生误差,因此对精确度要求比较高时,建议使用 DECIMAL 来存储。DECIMAL 在 MySQL 中是以字符串存储的,用于定义货币等对精确度要求较高的数据。在数据迁移中,FLOAT(M,D)是非标准 SQL 定义,数据库迁移可能会出现问题,最好不要这样使用。另外,两个浮点数进行减法和比较运算时也容易出问题,因此在进行计算的时候,一定要小心。如果进行数值比较,最好使用 DECIMAL 类型。

  3. 日期和时间类型 MySQL 对于不同种类的日期和时间有很多的数据类型,比如 YEAR 和 TIME,如果只需要记录年份,则使用 YEAR 类型即可;如果只记录时间,只需使用 TIME 类型。如果同时需要记录日期和时间,则可以使用 TIMESTAMP 或者 DATETIME 类型。由于 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,因此存储范围较大的日期最好使用 DATETIME。TIMESTAMP 也有一个 DATETIME 不具备的属性。默认的情况下,当插入一条记录但并没有指定 TIMESTAMP 这个列值时,MySQL 会把 TIMESTAMP 列设为当前的时间。因此当需要在插入记录的同时插入当前时间时,使用 TIMESTAMP 是方便的,另外 TIMESTAMP 在空间上比 DATETIME 更有效。

  4. CHAR 与 VARCHAR 之间的特点与选择 CHAR 和 VARCHAR 的区别如下:(1)CHAR 是固定长度字符,VARCHAR 是可变长度字符;(2)CHAR 会自动删除插入数据的尾部空格,VARCHAR 不会删除尾部空格;(3)CHAR 是固定长度,所以它的处理速度比 VARCHAR 的速度要快,但是它的缺点就是浪费存储空间。所以对存储不大,但在速度上有要求的可以使用 CHAR 类型;反之,可以使用 VARCHAR 类型来实现

发布于: 刚刚阅读数: 3
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
《MySQL入门很轻松》第4章:数据表中存放的数据类型_8月月更_乌龟哥哥_InfoQ写作社区