• 第3讲:MySQL数据库中常见的几种表字段数据类型


    MySQL数据库中常见的几种表字段数据类型


    在MySQL数据库中,数据类型有很多种,主要分为三大类:数值类型、字符串类型、时间日期类型。

    1.表字段数据类型之数值类型

    常见的数值类型的表字段有:TINYINT、SMALLINT、MEDIUMINT、INT、INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL几种。

    在数值类型中存在符合范围的的概念,分别是有符号(SIGNED)范围和无符号(UNSIGNED)范围,简单理解有符号范围指的是包含负数,无符号范围指的是只有正数,不包含负数的数据类型。

    1.1.常见的几种数值类型

    TINYINT类型:

    • TINYINT类型的含义是小整数值,数据大小为1字节。

    • 有符号范围:(-128 ~ 127),无符号范围:(0 ~ 255)

    SMALLINT类型:

    • SMALLINT类型的含义是大整数值,数据大小为2字节。

    • 有符号范围:(-32768 ~ 32767),无符号范围:(0 ~ 65535)

    MEDIUMINT类型:

    • MEDIUMINT类型的含义也是大整数值,比SMALLINT类型范围更广,数据大小为3字节。

    • 有符号范围:(-8388608 ~ 8388607),无符号范围:(0 ~ 16777215)

    INT和INTEGER类型:

    • INT和INTEGER类型功能一样,也都是大整数值,INT和INTEGER类型比MEDIUMINT类型的范围还要广,数据大小为4字节。
    • 有符号范围:(-2147483648 ~ 2147483647),无符号范围:(0 ~ 4294967295)

    BIGINT类型:

    • BINGINT类型也是大整数值,比前面提到的几种类型的范围更广,也被称为极大整数值,数据大小为8个字节。
    • 有符号范围:(-2^63 ~ 2^63-1),无符号范围:``(0 ~ 2^64-1)`。

    FLOAT类型:

    • FLOAT类型的含义是单精度浮点数值,数据大小为4字节。

    • 有符号范围:(-3.402823466 E+38 ~ 3.402823466351 E+38),无符号范围:0 和 (1.175494351 E-38 ~ 3.402823466 E+38)

    DOUBLE类型:

    • DOUBLE类型的含义是双精度浮点数值,数据大小为8字节。

    • 有符号范围:(-1.7976931348623157 E+308 ~ 1.7976931348623157 E+308),无符号范围:0 和 (2.2250738585072014 E-308 ~ 1.7976931348623157 E+308)

    DECIMAL类型:

    • DECIMAL类型是小数中最常用的数据类型,含义就是小数值,可以精确定点数。
    • DECIMAL类型的有符号范围和无符号范围都依赖于M(精度)和D(标度)指定的值,所谓的精度就是小数中所有点数的总和,标度就是小数中小数点以后的数量。
      • 例如34.156这个小数,小数点左边有2位,精度就是2,小数点右边有3位,标度就是3。

    1.2.选择数值类型的几个要点

    在所有的数值类型中,整数值不是越大越合适,要根据自己数据的存储需求,按需来选择需要设置的数据类型。

    整数值的范围越大,那么占用的空间就越大,合理设置数据类型很关键。

    浮点数小数一般都会用DESCIMAL数据类型。

    1.3.应用数值类型的典型示例

    在这么多种数值类型中,如何选择出真正适合当前应用场景的数据类型呢?在前面也说了,不是越大越好,要越合理越好,下面的例子带你理解明白。

    1)人员年龄字段的数据类型选择

    根据这个字段的字面意思,我们大体知道这个字段是存储人员的年龄的,那么年龄的数值范围一定不会特别大,像前面看到的几个大整数值完全可以不采用,但是很多情况下,开发只知道INT类型,INT类型的数值范围非常的广,范围大确实很好,但是对于年龄这个需求来说没必要那么大,范围大了,采用INT类型占用4个字节,占用的空间也很大。

    因此要明白一个道理,合适自己的才是最好的,像第一种介绍的数值类型TINYINT,在年龄中不会存在负数,因此可以采用TINYINT类型的无符号范围,这个数据类型虽然是小整数值,但是范围却是0 ~255之间,那么足够年龄的使用了。

    SQL如下所示:

    age TINYINT UNSIGNED
    
    • 1

    2)分数字段的数据类型选择

    小数类型可以使用DOUBLE和DECIMAL两者都可,没有太大的区别,要考虑分数不会超过一千分,因此小数点中左边最大只会有3个,分数中包含小数,但是都是.5之类的,因此小数点右边只会有1个,根据分析得知,精度为4,标度为1。

    fenshu DOUBLE(4,1)
    fenshu DECIMAL(4,1)
    
    • 1
    • 2

    2.表字段数据类型之字符串类型

    2.1.常见的几种字符串类型

    在字符串数据类型中使用最多的就是CHAR和VARCHAR两种,TEXT和LONGTESXT也是常用的字符串数据类型。

    其中带有TEXT的数据类型是针对文本的数据类型,带有BLOB的数据类型是针对二进制文本的数据类型,二进制的字符串存储很少用,会有专门的文件服务器进行存储,数据库存储二进制字符串性能不高。

    类型大小描述
    CHAR0~ 255 bytes定长字符串
    VARCHAR0 ~ 65535 bytes变长字符串
    TINYBLOB0 ~ 255 bytes不超过255个字符的二进制数据
    TINYTEXT0 ~ 255 bytes短文本字符串
    BLOB0 ~ 65535 bytes二进制形式的长文本数据
    TEXT0 ~ 65535 bytes长文本数据
    MEDIUMBLOB0 ~ 16777215 bytes二进制形式的中等长度文本数据
    MEDIUMTEXT0 ~ 16777215 bytes中等长度文本数据
    LONGBLOB0 ~ 4 294967295 bytes二进制形式的极大文本数据
    LONGTEXT0 ~ 4 294 967295 bytes极大文本数据

    CHAR和VARCHAR的区别

    无论使用CHAR还是VARCHAR都需要指定字符串的长度,例如char(10) varchar(10)

    CHAR是定长字符串,当我们指定存储字符串的长度为10,如果写入的文本字符串的数量不够10个,则会以空格进行填充,性能比VARCHAR好。

    VARCHAR是变长字符串,当我们指定存储字符串的长度为10,写入了几个文本字符串就算几个,不会用空格进行补充,由于需要计算写入的字符串数量与总长度进行比较,因此VARCHAR的性能略低与CHAR。

    2.2.使用CHAR和VARCHAR的技巧

    当明确指定该字段写入的字符串数量,并且一定会写入指定数量的字符串时,选择CHAR作为数据类型。

    当不固定用户会写入多少个字符串时,但是由文字数量限制,此时就使用VARCHAR作为数据类型。

    例如用户名是无法固定的,采用VARCHAR作为数据类型,而性能是固定的,只有一个字符串,则使用CHAR数据类型。

    name varchar(10)
    xingbie char(1)
    
    • 1
    • 2

    3.表字段数据类型之日期时间类型

    2.1.常见的几种日期时间类型

    常见的日期时间的数据类型有:DATE、TIME、YEAR、DATETIME、TIMESTAMP等,其中最为常用的是DATE、TIME和DATATIME这三种。

    DATE类型

    • DATE类型的大小是3字节,时间范围是1000-01-01 至 9999-12-31,足够使用。
    • 在表中的显示格式为YYYY-MM-DD,相当于日期值,只显示年月日。

    TIME类型

    • TIME类型的大小是3字节,时间范围是-838:59:59 至 838:59:59。
    • 在表中的显示格式为HH:MM:SS,相当于时间值或者持续时间,只显示时分秒。

    YEAR类型

    • YEAR类型的大小是1字节,时间范围是1901至2155。
    • 在表中的显示格式为YYYY,相当于年份值,只显示年。

    DATETIME类型

    • DATETIME类型的大小是8字节,时间范围是1000-01-01 00:00:00 至 9999-12-31 23:59:59。
    • 在表中的显示格式为YYYY-MM-DD HH:MM:SS,相当于混合日期和时间值,日期值和时间值的合并,既显示年月日又显示时分秒。

    TIMESTAMP类型

    • TIMESTAMP类型的大小是4字节,时间范围是1970-01-01 00:00:01 至 2038-01-19 03:14:07,只能使用到2038年。
    • 在表中的显示格式为YYYY-MM-DD HH:MM:SS,和DATETIME类型相似,也是既显示年月日又显示时分秒,不过TIMESTAMP类型显示的是时间戳。

    2.2.日期时间类型使用技巧

    当字段为入职时间、毕业时间、出生时间等等,像这种只能固定到年月日的字段,使用DATE数据类型。

    像创建时间、更新时间、加入时间等等可以追踪的字段,使用DATETIME类型。

  • 相关阅读:
    混合云搭建-S2S VPN 连接Azure和AWS云动手实践
    用户层与驱动层通信
    有哪些强化学习的算法以及它们的原理及优缺点
    【漏洞复现】Django _2.0.8_任意URL跳转漏洞(CVE-2018-14574)
    分片上传与断点续传
    glibc 2.23 源码分析 | malloc & free
    ROS从入门到精通2-8:Gazebo仿真之快速生成二维地图真值
    需求管理-架构真题(三十四)
    初识变量和数据类型
    spring.profiles.active和spring.profiles.include的使用及区别说明
  • 原文地址:https://blog.csdn.net/weixin_44953658/article/details/126093872