zoukankan      html  css  js  c++  java
  • 【MySQL】MySQL数据类型

    MySQL表数据存储大小说明

    MySQL中规定,任何一条记录(数据表中每行数据)理论上的最大存储容量为 2^16 - 1 (Bytes) = 65535字节。

    MySQL数据类型思维导图

    MySQL数据类介绍

    1.数值型

    数值型数:都是数值,DBMS将数值型分为整数型和小数型。
    (DBMS默认使用有符号数值型整数类型,SQL语句 ......数值型 unsigned...... 表示使用无符号整数类型。)

    整数型

    tinyint:使用1个字节进行存储数据,小整数;
    smallint:使用2个字节进行存储数据
    mediumint:使用3个字节进行存储
    int/intege:标准整型,使用4个字节存储数据(常用数据类型)
    bigint:使用8个字节存储数据,大整数。

    小数型(浮点型)

    float:使用4个字节进行存储数据
    float表示沒有小数部分
    float(M,D) M表示数据总长度,D表示小数部分长度,M-D表示整数部分长度
    double:使用8个字节进行存储数据
    double表示沒有小数部分
    double(M,D) M表示数据总长度,D表示小数部分长度,M-D表示整数部分长度

    小数型(定点型)

    decimal:
    double表示沒有小数部分
    double(M,D) M表示数据总长度,D表示小数部分长度,M-D表示整数部分长度

    2.时间日期类型

    datetime:时间日期,格式是YYYY-mm-dd HH:mm:ss, 表示范围从1000到9999年,有0值:0000-00-00 00:00:00
    date:日期,就是datatime中data部分
    time:时间,指定某个时间,可以是负数
    year:格式YYYY表示某年,可以使用2位数,也可以使用4位数
    timestamp:时间戳,只要所在记录被更新,时间戳会被更新成现在的时间。

    3.字符串类型

    定长字符串
    char(L):L代表length,可以存储的长度,单位为字符,最大长度255。
    char(4):在UTF8环境下,需要4 * 3 = 12字节

    变长字符串:根据具体数据大小分配存储空间
    varchar(L):L代表length,可以存储的长度,理论长度是65536个字符

    文本字符串
    文本字符串根据存储的数据格式可以分为text和blob
    text:存储长文本字符
    blob:存储二进制数据(通常不使用)

    枚举字符串
    枚举:enum,将日后所有可能出现的数据结果在数据库建表时的字段声明中设计完成,实际业务中存储的数据必须是规定好的数据。
    枚举的使用方式
    定义:enum(可能出现的元素列表); -- 如 gender enum('男','女','保密');
    create table gender_tables(
    gender enum('男', '女', '保密');
    ) charset utf8;

    使用:只能存储预定义数据。insert into tablename value(......, '男', ......);枚举实际存储的是数值,可以直接向表中枚举字段插入数字,也可以插入字符串。
    或insert into gender value(....., 0, ......);

    枚举字符串类型的原理
    枚举数据类型使用1-2个字节进行存储数据。若DBMS使用2个字节进行存储数据。那么该DBMS中任一个枚举数据类型最大枚举选项量为65536个。实际业务数据中,枚举数据类型都只有较小的数据量。原理:枚举实际存储的是数值,可以直接向表中枚举字段插入数字。建表时,枚举数据类型在数据规范的时候(定义时),系统会自动建立一个数字与枚举元素的对应关系存放到日志中。在进行数据插入的时候,系统自动将字符转换成对应的数字进行存储;在数据提取的时候,DBMS自动将数据转换为对应的字符串进行显示或者传值。如果数据库信息量巨大,记录条数(数据表的行数)繁多,可以省很多存储空间,规范了数据。但是系统存储效率会有所降低。

    集合字符串
    集合数据类型跟枚举数据类型似:实际存储的是数值,不是字符串(集合可存储多个数字)
    枚举的使用方式
    定义:set(元素列表); -- 如 hobby set('网球','乒乓球','游泳','跑步');
    -- 结合中每一个元素都对应一个二进制位。
    create table set_tables(
    hobby set('网球','乒乓球','游泳','跑步');
    ) charset utf8;

    使用:只能存储预定义数据。insert into tablename value(......, '男', ......);枚举实际存储的是数值,可以直接向表中枚举字段插入数字,也可以插入字符串。
    insert into set_tables value('乒乓球','游泳','跑步'); insert into set_tables value(2^n); 参见B站 mysql精通视频。

  • 相关阅读:
    Integer值判断是否相等问题
    Java连接Redis
    oracle 10G 没有 PIVOT 函数怎么办,自己写一个不久有了
    前端修炼(第三天)函数
    前端 JS 修炼(第一天)包装对象、作用域、创建对象
    linux oracle 启动全过程
    「android」webview中文乱码
    「dos」bat单条命令跨多行
    「股票」东方财富网公式-缩量
    「android」as javadoc乱码
  • 原文地址:https://www.cnblogs.com/Lints/p/11575510.html
Copyright © 2011-2022 走看看