今天浏览mysql的官网文档,无意中看到如图划线部分一句话,引起了我的兴趣,所以决定做实验官方所言。

条例1.创建数据表时,所有字段定义时"宽度之和"不得超过65535字节;

条例2.理论上的char(255)、varchar(65532)、varbinary(65532)字段最大值定义,实际情形是达不到的,因为首先要遵守条例1。

实验测得规律(MySQL5.7):
    tinyint 定义占1字节

smallint 定义占2字节

int 定义占4字节

char(2) 定义占2*3=6字节(当存储3个中文时每字占3字节,所以占6字节)

char(3) 定义占3*3=9字节

varchar(10) 定义占10*3=30字节(当存储10个中文时每字占3字节,所以占30字节)

varbinary(8) 定义占8+1=9字节

text 定义占10字节

mediumtext 定义占10+1=11字节

decimal(10,2) 定义占5字节

实验

实验1:只有一个ch20字段

drop table `tab4`;

create table `tab4`(
`ch20` varbinary() COMMENT '定义占65532字节'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='实验表';
实验2:添加 `num1` tinyint 字段

drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`ch20` varbinary() COMMENT '定义占65532-1 = 65531 字节'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='实验表';
实验3:再添加 `num2` int 字段

drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`num2` int,
`ch20` varbinary() COMMENT '定义占65532-1-4 = 65527 字节'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='实验表';
实验4:再添加 `chr1` char() 字段

drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`num2` int,
`chr1` char(),
`ch20` varbinary() COMMENT '定义占65532-1-4-4*3 = 65515 字节'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='实验表';
实验5:再添加 `content` text 字段

drop table `tab4`;

create table `tab4`(
`num1` tinyint,
`num2` int,
`chr1` char(),
`content` text,
`ch20` varbinary() COMMENT '定义占65532-1-4-4*3-10 = 65505 字节'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='实验表';

小结:新添加的字段“取决于最大行大小”是指,`ch20` varbinary(65505) 与其它所有字段共享宽度,此消彼长;

MySQL各类型字段可定义最大宽度的更多相关文章

  1. mysql int类型字段插入空字符串时自动转为0

    mysql int类型字段插入空字符串时自动转为0 如果不想转的话可以修改配置文件 修改 my.ini 文件. # Set the SQL mode to strictsql-mode=”STRICT ...

  2. Mysql各种类型字段长度

    1.数值类型 列类型 需要的存储量 TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIGINT 8 个字节 F ...

  3. mysql变成类型字段varchar值更新变长或变短底层文件存储原理

    为了搞清楚MySQL对于可变长度字段值修改时,如何高效操作数据文件的机制.之前一直模糊不清,网上也搜不到现成的答案.经过多方资料搜集整理.写出此文供大家一起参阅.由于涉及众多非常底层的知识,我假设读者 ...

  4. MySQL 时间类型字段的分析

    日期类型                存储空间               日期格式                                           日期范围---------- ...

  5. MySQL整数类型字段的长度总结

    MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4)). 该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度.(类似使用LPAD函数效果) 在INT( ...

  6. mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性

    timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下: 1.CURRENT_TIMESTAMP 当要向 ...

  7. MYSQL SET类型字段的SQL查询某个字段保函某个值的查询

    1.column set('hot','crazy','smart')  //column字段(set属性)三个值 2.select * from table where FIND_IN_SET('h ...

  8. 扩展mybatis和通用mapper,支持mysql的geometry类型字段

    因项目中需要用到地理位置信息的存储.查询.计算等,经过研究决定使用mysql(5.7版本)数据库的geometry类型字段来保存地理位置坐标,使用虚拟列(Virtual Generated Colum ...

  9. mysql语句中把string类型字段转datetime类型

    mysql语句中把string类型字段转datetime类型   在mysql里面利用str_to_date()把字符串转换为日期   此处以表h_hotelcontext的Start_time和En ...

随机推荐

  1. SQLi-LABS Page-1(Basic Challenges) Less1-Less4

    Less-1 GET - Error based - Single quotes - Stri http://10.10.202.112/sqli/Less-1?id=1 http://10.10.2 ...

  2. Scrum 冲刺第五篇

    我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1  29号站立式会议照片: 1.2  昨天已完成的事情 团队成员 昨日计划完成的工作: 黄思扬 活动管理模块(前端) ...

  3. linux 中断底半部机制对比(任务队列,工作队列,软中断)--由linux RS485引出的血案【转】

    转自:http://blog.chinaunix.net/uid-20768928-id-5077401.html 在LINUX RS485的使用过程中,由于各种原因,最后不得不使用中断底半部机制的方 ...

  4. python中property简单使用与实现

    property简单使用 class P: """ property简单使用 """ def __init__(self,name): se ...

  5. 【MySQL高可用架构设计】(一)-- mysql复制功能介绍

    一. 介绍 Mysql的复制功能是构建基于SQL数据库的大规模高性能应用的基础,主要用于分担主数据库的读负载,同时也为高可用.灾难恢复.备份等工作提供了更多的选择. 二.为什么要使用mysql复制功能 ...

  6. ASIO库使用注意事项

    1. 使用 io_service::work 实现 io_service 无任务时不退出 正常情况下向io_service抛任务,它执行完成后就会自动退出,而要实现那种chromium那种的循环队列, ...

  7. djang小项目过程中的小问题 01(django中的configrarion配置、django自带命名规范)

    不知道为什么,明明照着做,但是我就会遇到一些错误问题,但是我觉着自己生下来就是解决问题的. ##1. 第一个是在django运行时,没有配置configration, 这个时候我添加一个django ...

  8. postgres 字符操作补位,字符切割

    补位: ,'); -- 字符切割 并取值: )

  9. 爬虫,爬取景点信息采用pandas整理数据

    一.首先需要导入我们的库函数 导语:通过看网上直播学习得到,如有雷同纯属巧合. import requests#请求网页链接import pandas as pd#建立数据模型from bs4 imp ...

  10. Linux性能优化实战学习笔记:第三十七讲

    一.上节回顾 上一节,我带你一起学习了网络性能的评估方法.简单回顾一下,Linux 网络基于 TCP/IP协议栈构建,而在协议栈的不同层,我们所关注的网络性能也不尽相同. 在应用层,我们关注的是应用程 ...