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. 【ADO.NET基础】——数据库连接

    SQL Sever连接字符串 (1)标准的安全连接 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername; ...

  2. 玩转 SpringBoot 2 快速整合拦截器

    概述 首先声明一下,这里所说的拦截器是 SpringMVC 的拦截器 HandlerInterceptor.使用SpringMVC 拦截器需要做如下操作: 创建拦截器类需要实现 HandlerInte ...

  3. 自定义属性--JavaScript

    1 - 获取属性值 element.属性 获取属性值 element.getAttribute('属性') 区别: element.属性 --获取内置属性(元素本身自带的属性) element.get ...

  4. java基础之循环遍历List和Map

    List和Map是在编程中使用的最频繁的集合类型了,每天都不知道要见它们多少面.在这里介绍下这两种类型的循环遍历,以供学习参考和使用. 一.List 遍历List一般有三种方法,如下: List< ...

  5. Scala 学习笔记之集合(1)

    package com.citi.scala object CollectionDemo { def main(args: Array[String]): Unit = { /** * List */ ...

  6. 快学Scala 第二十课 (trait的构造顺序)

    trait的构造顺序: 首先调用超类构造器 特质构造器在超类构造器之后,类构造器之前执行 特质从左向右被构造 每个特质当中,父特质先被构造 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被 ...

  7. (7)Cmake的使用简介

        CMake是一个跨平台的安装(编译)工具,是一个比Make更高级的的编译配置工具,可以根据不同平台.不同编译器,通过编写CmakeLists,可以控制生成的Makefile,从而控制编译过程. ...

  8. e课表项目第二次冲刺周期第五天

    昨天干了什么? 昨天,我们组商量了主界面的主要设计,然后我查找了相关的资料,将主界面改成了一个连接数据库,并将数据库中的数据进行显示.接着,又在网上搜了一些资料,为数据建立了一个布局,能够显示该数据的 ...

  9. Mapper

    public static T MapTo<T>(this object obj) { if (obj == null) return default(T); Mapper.CreateM ...

  10. [转] Java 无界阻塞队列 DelayQueue 入门实战

    原文出处:http://cmsblogs.com/ 『chenssy』 DelayQueue是一个支持延时获取元素的无界阻塞队列.里面的元素全部都是"可延期"的元素,列头的元素是最 ...