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精通视频。

【MySQL】MySQL数据类型的更多相关文章

  1. MySQL数据库3 - MySQL常用数据类型

    一. MySql常用数据类型 数据类型:整数(tinyint smailint int bigint) 定点数 decimal(p,s) ------ 小数点位置固定的       ---> 数 ...

  2. Mysql常用数据类型

    Mysql常用数据类型 数字: 字符串: 时间:

  3. MySQL日期数据类型、时间类型使用总结

    MySQL日期数据类型.时间类型使用总结 MySQL日期数据类型.MySQL时间类型使用总结,需要的朋友可以参考下.   MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型    ...

  4. MySQL日期数据类型、MySQL时间类型使用总结

    MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ------------ --- ...

  5. MySQL数据库数据类型之集合类型SET测试总结

    MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...

  6. mysql 的数据类型

    mysql 的数据类型(描述的是字段)三大类:一.整型:1.tinyint(M),其中M是显示宽度,需要配合zerofill,就是前面0填充,存储单位为1个字节(8位),无符文是最大能存储范围0000 ...

  7. MySQL的数据类型(转)

    MySQL的数据类型 1.整数 TINYINT: 8 bit 存储空间 SMALLINT: 16 bit 存储空间 MEDIUMINT: 24 bit 存储空间 INT: 32 bit 存储空间 BI ...

  8. mysql之数据类型

    一.概述:  所谓建表,就是声明列的过程: 数据是以文件的形式放在硬盘中(也有放在内存里的) 列:不同的列类型占的空间不一样 选列的原则:够用又不浪费: 二.mysql的数据类型: 整形:Tinyin ...

  9. MySQL/MariaDB数据类型

    1.为什么要定义MySQL数据类型 定义MySQL数据类型其实就是为了对数据进行分类,实现对不同的分类进行不同的处理 1.使系统能够根据数据类型来操作数据. 2.预防数据运算时出错.例如,通过强大的数 ...

  10. mysql的数据类型和字段属性

    本文内容: 数据类型 数值类型 整数型 浮点型 定点型 日期时间类型 字符串类型 补充: 显示宽度与zerofll 记录长度 字段属性 空\不为空值:NULL.NOT NULL 主键:primary ...

随机推荐

  1. Event Hub小白入门指南

    Event Hub事件中心 本文的目的在于用最白的大白话,让你从“完全不懂”开始,理解什么是分布式大数据流平台Event Hub,并且理解它的关键概念,并且初步理解其收发数据API. 定义,Event ...

  2. Python 对cookies的处理——urllib2

    import urllib2 import cookielib cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2 ...

  3. 品Spring:对@Resource注解的处理方法

    @Resource是Java的注解,表示一个资源,它具有双向的含义,一个是从外部获取一个资源,一个是向外部提供一个资源. 这其实就对应于Spring的注入和注册.当它用在字段和方法上时,表示前者.当它 ...

  4. [Android Studio] 2019年Android Studio配置指北

    Android Studio是我学习Android开发路上的第一块绊脚石,新建一个项目,一行代码没动,直接编译不起来,我太难了,所以本文叫指北 本文讲解在9102年如何在国内网络不通畅的情况下流畅的使 ...

  5. Java的一些基础知识深入

    1.浅析Java中的final关键字: 2.Java中的static关键字解析: 3.探秘Java中String.StringBuilder以及StringBuffer: 4.Java内部类详解: 5 ...

  6. 线程安全-JUC

    在多线程开发中,我们常遇到的问题就是并发数据,怎么保证线程安全.怎么保证数据不重复. 1. volatile volatile是一个java关键字,常用于在多线程中共享变量 volatile原理 每个 ...

  7. IoC 之装载 BeanDefinitions 总结

    最近时间重新对spring源码进行了解析,以便后续自己能够更好的阅读spring源码,想要一起深入探讨请加我QQ:1051980588 ClassPathResource resource = new ...

  8. 常用注解@Controller、@Service、@Autowired

    @Controller.@Service在spring-context-5.1.10.RELEASE.jar包下,所在包如下 @Autowired在spring-beans-5.1.10.RELEAS ...

  9. redis安装及启动

    Redis 的安装及启动停止 下载 https://redis.io/download 软件copy至虚拟机中,常用的路径为/root/software 开始安装 安装gcc 目的是为了编译软件 yu ...

  10. Python的字符串编码

    本文用实验详细地演示了Python2和Python3在字符串编码上的区别. 在Python2中,字符串字面量对应于8位的字符或面向字节编码的字节字面量.这些字符串的一个重要限制是它们无法完全地支持国际 ...