• MySQL数据类型


    摘要:要了解MySQL数据库,首先得了解MySQL数据库所支持的数据类型,其中包含整数类型,实数类型,字符串类型,枚举类型,时间类型。

    1.整数类型

    整数类型主要包含TINYINT(1 Bytes),SMALLINT(2 Bytes),MEDIUMINT(3 Bytes),INT(4 Bytes),BIGINT(8 Bytes)。

    整数类型可以选择 UNSIGNED 属性,表示不允许负数,这样可以使得正数的上限提高一倍。举个例子,INT 的存储范围是 -2-31 ~ 231 - 1,

    也就是 -2147483648 ~ 2147483647,那么 UNSIGNED INT 可以存储的范围就是 0 ~ 263 - 1,即 0 ~ 9223372036854775807。

    整数类型可以指定宽度,其实是没有意义的,它不会限制整数类型的合法范围。如果不显示地指定宽度,则默认为 INT(11)。会误认为 INT(11) 指定整数类型的长度是 11 位,这个想法是错误的。

    更小的数据类型通常更快,因为占用更少的磁盘空间。如果需要存储性别状态(1-男;2-女;99-未知),这个时候应该优先考虑 TINYINT,而不是 INT,因为 TINYINT 占用更少的磁盘空间。因此,需要选择合适的整数类型来减少占用的磁盘空间,而不是选择全部使用 INT 或 BIGINT。

    2.实数类型

    主要有FLOAT(4 Bytes),DOUBLE(8 Bytes),DECIMAL

    FLOAT(M,D) 和 DOUBLE(M,D) 表示一共显示 M 位整数,D 位小数。举个例子,FLOAT(5,2) 可以显示为 100.99,MySQL 保存时会进行四舍五入,因此,如果值为 100.0099, 会保存近似结果 100.01。

    FLOAT 只保证 6 位有效数字的准确性,所以 FLOAT(M,D) 中,M<=6 时,数字通常是准确的。

    DOUBLE 只保证 16 位有效数字的准确性,所以 DOUBLE(M,D) 中,M<=16 时,数字通常是准确的。

    在使用实数类型,要重点考虑精度问题。DOUBLE 是 MySQL 内部浮点计算的类型,它比 FLOAT 有更高的精度和更大的范围,但是 FLOAT 和 DOUBLE 都是不精确的,如果要实现精确浮点运算,就需要使用 DECIMAL 类型。

    因此,如果需要考虑精度问题,优先考虑 DECIMAL 类型。如果对精度问题不是特别敏感,可以考虑使用 FLOAT 或者 DOUBLE 类型。

    3.字符串类型

    对于实数类型,可以使用 CHAR、 VARCHAR、 BLOB、 TEXT 等。

    CHAR 类型是定长的。MySQL 会根据定义的长度分配空间。CHAR 长度可以是 0 到 255之间的值。

    VARCHAR 类型用于存储可变长字符串,它更加节省空间。值得注意的是, VARCHAR 实际上会使用 1 或 2 个额外字节记录字符串的长度。VARCHAR 长度可以指定 0 到 65535 之间的值。

    BLOB 和 TEXT 主要用来存储大文本,分别采用二进制和字符串方式存储。如果 BLOB 和 TEXT 还无法满足需求,还可以使用 TINYBLOB、 MEDIUMBLOB、 LONGBLOB、 TINYTEXT、 MEDIUMTEXT、 LONGTEXT。值得注意的是,它们不能够有默认值。

    对于字符串类型的使用场景,可以大概总结下。

    定长的字符串,可以选择 CHAR。举个例子,身份证是定长类型,那么选择 CHAR 是非常合适的。

    变长的字符串,可以选择 VARCHAR, 因为 VARCHAR 更加节省空间。

    存储大文本的场景,可以考虑使用 BLOB 和 TEXT。如果 BLOB 和 TEXT 还无法满足需求,还可以使用 TINYBLOB、 MEDIUMBLOB、 LONGBLOB、 TINYTEXT、 MEDIUMTEXT、 LONGTEXT。

    4.枚举类型

    实际上, 枚举类型保存的是整数类型,但其显示为字符串。如果将一个非法值插入,即允许的值之外的字符串,枚举类型将不允许操作,但是枚举类型允许空字符串和 NULL 类型。

    尽量不要使用枚举类型,因为枚举类型增加了维护成本。试想,如果需要增加新的枚举类型,需要全表更新,如果对于大数据量的更新场景,会造成锁表,这是多么恐怖的事情。

    5.时间类型

    对于时间类型,MySQL 提供了丰富的数据类型: YEAR、 DATE、 TIME、 DATETIME、 TIMESTAMP。每个时间类型都对应着不同的时间格式。

    DATETIME 和 TIMESTAMP 都可以存储相同类型的数据,而 TIMESTAMP 只使用 DATETIME 一半的存储空间。通常情况下,建议优先考虑 TIMESTAMP,因为它的空间利用率更高。

    参考资料:http://blog.720ui.com/2017/mysql_core_01_data_type/

  • 相关阅读:
    CCD类型介绍:Linear, Interline, FullFrame, FrameTransfer CCD的区别
    电源纹波调试小结
    FPGA调试之特殊管脚
    C#获取指定日期的星期,和sql server中根据指定日期取出来的相对应
    利用TSQL添加作业
    SQL insert失败时也会造成自增长字段加1
    ANSI编码
    分页
    PHP编码转换
    SqlDataReader读取带有输出参数的存储过程
  • 原文地址:https://www.cnblogs.com/wuyuetian/p/8688287.html
Copyright © 2020-2023  润新知