• MySQL数据类型


    1、整数类型:

    TINYINT: 1字节
    SMALLINT:2字节
    MEDIUMINT:3字节
    INT:4字节
    BIGINT: 8字节
    每个可以存储的值范围为 -2(N-1) ~ 2(N-1)- 1,其中N为占的字节数 * 8(也就是占用的位数)
    整数类型可以选择使用无符号也就是UNSIGNED,这可以使得上限提升约一倍,例如:TINYINT表示-128-127,然而TINYINT UNSIGNED可以表示0-255
    有符号和无符号的性能和存储空间是相同的

    2、实数类型:

    FLOAT:4字节
    DOUBLE:8字节
    与上面两种不同的是Mysql内部自己实现了一种DECIMAL 来表示更高精度的实数
    例如:DECIMAL(18,9) 表示一共十八位,其中小数点后面可以表示9位,DECIMAL是Mysql自己内部实现的,运算效率取决于内部实现,而CPU原生支持FLOATDOUBLE的运算,通常FLOATDOUBLE效率比DECIMAL

    3、字符串类型(以下字符串类型都在InnoDB存储引擎下讨论,因为不同存储引擎的实现可能是不同的):

    VARCHAR: VARCHAR用于存储可变长度的字符串,往往比定长更省空间,因为在使用上只使用必要的空间,但是需要额外使用1个或者2个字节来表示当前存储的长度,如果列的长度小于等于255个字节,则使用一个字节,否则两个,当然他也有一些不好的情况,例如:因为行是变长的,所以有可能当更新时,剩下的页空间已经不足以放入新的数据,这时候就会产生页分裂,而页分裂又伴随着IO操作,对性能是有损耗的
    以下情况适合使用VARCHAR:字符串最大长度比平均长度大很多;列的更新很少;使用了UTF-8这样子的字符集,每个字符间可能都使用不同的字节数存储
    CHAR: CHAR类型占用空间是定长的,当插入的数据不够时,在末尾使用空格来填充,所以当填入的数据右边有空格时,mysql会自动删除这些空格,例如存入的数据为“123 ”,我们再使用sql去查询,查询的结果为”123”,CHAR适合存储很短或者所有值都接近同一个长度或者长度为定值的数据,即使是经常变更的数据,因为是定长也不会产生页分裂。
    BLOBTEXT: BLOBTEXT都是为了存储很大的数据而设计的字符串类型,分别采用二进制和字符方式存储,与其他类型不同,MySQL把每个BLOGTEXT的值当作一个独立的对象处理,当值太大时,InnoDB会使用专门的外部存储区域来存储,此时在行内存储一个指向外部区域的指针;

    4、日期和时间类型

    DATETIME:格式为YYYYMMDDHHMMSS,它可以保存1001年到9999年,精度为秒
    TIMESTAMP:时间戳类型,TIMESTAMP只用了4个字节存储,只能表示1970到2038年
    YEAR:存储年份
    DATE:存储日期,没有小时分钟和秒,格式可以为YYYY-MM-DD
    TIME:存储小时分钟和秒,格式可以为 HH:MM:SS

    参考资料:《高性能MySQL》第三版

  • 相关阅读:
    8086汇编-24[BX]和Loop指令02
    【博客479】prometheus-----时序数据模型及其存储机制
    [ROS]虚拟机ubuntu18.04系统里面运行usb_cam
    Vue项目实战之电商后台管理系统(五) 商品分类模块
    使用Ganache、web3.js和remix在私有链上部署并调用合约
    ClickHouse 面试题
    【001】 libpq是什么?如何使用?
    win32 python查找文字指定格式 win32com
    【机器学习300问】60、图像分类任务中,训练数据不足会带来什么问题?如何缓解图像数据不足带来的问题?
    Latex 安装与配置
  • 原文地址:https://blog.csdn.net/weixin_45415649/article/details/125510923