• Mysql数据类型


    mysql数据类型

    类型类型举例
    整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
    浮点类型FLOAT、DOUBLE
    定点数类型DECIMAL
    位类型BIT
    日期时间类型YEAR、TIME、DATE、DATETIME、TIMESTAMP
    文本字符串类型CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
    枚举类型ENUM
    集合类型SET
    二进制字符串类型BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
    JSON类型JSON对象、JSON数组
    空间数据类型单值类型:GEOMETRY、POINT、LINESTRING、POLYGON;集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION

    数据类型属性

    MySQL关键字含义
    NULL数据列可包含NULL值
    NOT NULL数据列不允许包含NULL值
    DEFAULT默认值
    PRIMARY KEY主键
    AUTO_INCREMENT自动递增,适用于整数类型
    UNSIGNED无符号
    CHARACTER SET name指定一个字符集

    整数类型介绍

    整数类型字节数(一字节等于8位)
    TINYINT1
    SMALLINT2
    MEDIUMINT3
    INT、INTEGER4
    BIGINT8

    适用场景

    • TINYINT:一般用于枚举数据,比如系统设定取值范围很小且固定的场景。
    • SMALLINT:可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等。
    • MEDIUMINT:用于较大整数的计算,比如车站每日的客流量等。
    • INT、INTEGER:取值范围足够大,一般情况下不用考虑超限问题,用得最多。比如商品编号。
    • BIGINT:只有当你处理特别巨大的整数时才会用到。比如双十一的交易量、大型门户网站点击量、证券公司衍生产品持仓等。

    浮点类型

    浮点数和定点数类型的特点是可以 处理小数 ,你可以把整数看成小数的一个特例。因此,浮点数和定点数的使用场景,比整数大多了。 MySQL支持的浮点数类型,分别是 FLOAT、DOUBLE、REAL。

    • FLOAT 表示单精度浮点数,占用4个字节
    • DOUBLE 表示双精度浮点数,占用8个字节

    定点类型

    MySQL中的定点数类型只有 DECIMAL 一种类型。计算是没有精度损失的,但浮点型会有,涉及金钱的就要用定点数据类型

    开发经验

    “由于 DECIMAL 数据类型的精准性,在我们的项目中,除了极少数(比如商品编号)用到整数类型外,其他的数值都用的是 DECIMAL,原因就是这个项目所处的零售行业,要求精准,一分钱也不能差。 ” ——来自某项目经理


    日期类型

    • YEAR 类型通常用来表示年
    • DATE 类型通常用来表示年、月、日
    • TIME 类型通常用来表示时、分、秒
    • DATETIME 类型通常用来表示年、月、日、时、分、秒
    • TIMESTAMP 类型通常用来表示带时区的年、月、日、时、分、秒
    时间类型表示字节数(一字节等于8位)
    YEAR1
    TIME时间3
    DATE日期3
    DATETIME日期时间8
    TIMESTAMP日期时间4

    TIMESTAMP和DATETIME的区别:

    • TIMESTAMP存储空间比较小,表示的日期时间范围也比较小
    • 两个日期比较大小或日期计算时,TIMESTAMP更方便、更快。

    一般存注册时间、商品发布时间等,不建议使用DATETIME存储,而是使用 时间戳 ,因为DATETIME虽然直观,但不便于计算。


    字符串类型

    MySQL4.0版本以下,varchar(20):指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;MySQL5.0版本以上,varchar(20):指的是20字符,可以存20个(一个utf汉字算一个字符)。

    | 字符串(文本)类型 | 特点 | 长度 | 长度范围 | 占用的存储空间 |

    字符串(文本)类型特点长度长度范围占用的存储空间
    CHAR(M)固定长度M0 <= M <= 255M个字节
    VARCHAR(M)可变长度M0 <= M <= 65535(实际长度 + 1) 个字节

    char

    • 定义CHAR类型字段时,声明的字段长度即为CHAR类型字段所占的存储空间的字节数。
    • CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是1个字符。

    varchar

    • 检索VARCHAR类型的字段数据时,会保留数据尾部的空格。VARCHAR类型的字段所占用的存储空间为字符串实际长度加1个字节。
    • VARCHAR(M) 定义时, 必须指定 长度M,否则报错。

    情景比较

    • 存储很短的信息。比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的,结果得不偿失。
    • 十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。

    具体存储引擎考量

    • MyISAM 数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。这样使得整个表静态化,从而使 数据检索更快 ,用空间换时间。
    • MEMORY 存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系,两者都是作为CHAR类型处理的。
    • InnoDB 存储引擎,建议使用VARCHAR类型。因为对于InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且主要影响性能的因素是数据行使用的存储总量,由于char平均占用的空间多varchar,所以除了简短并且固定长度的,其他考虑varchar。这样节省空间,对磁盘I/O和数据存储总量比较好。
  • 相关阅读:
    android算法实现房贷计算器
    QLabel中显示版权符号©
    33.nacos客户端读取多配置文件实例(springcloud)
    c语言范例实例
    idea未知的解决方案
    微信开发者工具C盘占用大的问题
    Java8新特性——Lambda表达式
    JAVASE第十五天
    将两个数组中对应元素值的交换
    猿创征文|Highgo Database安全版安装指导手册
  • 原文地址:https://blog.csdn.net/pmc0_0/article/details/126088703