• 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》第三版

  • 相关阅读:
    计算机基础学习(好文必看)
    [附源码]java毕业设计儿童资源教育网站
    springcloud--riboon快速搭建
    如何在PostgreSQL中使用pg_stat_statements插件进行SQL性能统计和分析?
    【无标题】
    虎符限币种提现 用户曲线出金即亏损
    SQL注入漏洞(union + 盲注)
    2022年全球市场三维测量产品总体规模、主要生产商、主要地区、产品和应用细分研究报告
    蓝桥杯:核桃的数量(3148)java
    NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
  • 原文地址:https://blog.csdn.net/weixin_45415649/article/details/125510923