1. 官方文档说明

官方文档的内容如下,主要意思是字段个数限制达不到理想的4096个,且和字段类型有关,innodb引擎的字段上限是1017,。

2. 测试表字段数限制

2.1 测试innodb引擎表

因官方文档介绍了innodb表字段限制是1017,因此可以写程序进行模拟。思路如下:

a) 创建一张1个 char(1) 类型的innodb表

b) 循环往该表新增字段 直至报错

我使用的是python 脚本进行测试,脚本如下:

#!/usr/bin/python
# coding=utf-8
import pymysql as mdb
import ossor_conn = mdb.connect(host='127.0.0.1',port=3306,user='root',passwd='123456')
sor_cur = sor_conn.cursor()v_sql_d = "drop table if exists test.test_c ;"   # 为了程序重复执行,添加判断sor_cur.execute(v_sql_d)
sor_conn.commit()
v_sql_c = "create table test.test_c(c1 char(1)) engine=innodb;"
sor_cur.execute(v_sql_c)
sor_conn.commit()
v_id=2
while v_id<50000:v_sql_add_c = " alter table test.test_c add c%d char(1);"%(v_id)try:sor_cur.execute(v_sql_add_c)sor_conn.commit()except mdb.Error,e:v_cnt = v_id - 1print "Mysql Error %d: %s" % (e.args[0], e.args[1])print "MySQL has a limit of %d" %(v_cnt)breakv_id = v_id + 1
sor_conn.close()

运行结果如下:

[root@testdb python_pro]# python test_column.py
Mysql Error 1117: Too many columns
MySQL has a limit of 1017在SQLyog客户端手动验证也是同样的结果

因此,官方文档中介绍的MySQL innodb引擎表最多有1017个字段。

2.2 测试MYISAM引擎表

因为MySQL中另一种MYISAM引擎的表在MySQL5.7版本之前也是非常重要的存储引擎,只是后续版本使用越来越少,但是 还是有必要测试一番。

程序思路与测试innodb是均一致,只是将表的引擎进行修改,如下:

#!/usr/bin/python
# coding=utf-8
import pymysql as mdb
import os
import datetime
import timesor_conn = mdb.connect(host='127.0.0.1',port=3306,user='root',passwd='123456')
sor_cur = sor_conn.cursor()v_sql_d = "drop table if exists test.test_c ;"sor_cur.execute(v_sql_d)
sor_conn.commit()
v_sql_c = "create table test.test_c(c1 char(1))engine=MYISAM ;"
sor_cur.execute(v_sql_c)
sor_conn.commit()
v_id=2
while v_id<50000:v_sql_add_c = " alter table test.test_c add c%d char(1);"%(v_id)try:sor_cur.execute(v_sql_add_c)sor_conn.commit()except mdb.Error,e:v_cnt = v_id - 1print "Mysql Error %d: %s" % (e.args[0], e.args[1])print "MySQL has a limit of %d" %(v_cnt)breakv_id = v_id + 1
sor_conn.close()

运行结果如下:

[root@testdb python_pro]# python test_column.py
Mysql Error 1117: Too many columns
MySQL has a limit of 2598

也就是说MySQL中MyISAM引擎表最多可以存2598个字段。

3. 测试字段长度限制

大家都知道的一个知识是在MySQL中一行除了blob及text类的大字段之外,其余字段的长度之和不能超过65535,那么这个是确定的么,因此再次做一次测试。

3.1 测试UTF8字符集

创建一个只有一个字段的表,字段长度为65535 结果居然报错了,提示最大长度只能是21845,也就是65535/3的量,

/* 测试单字段长度 上限*/
CREATE  TABLE  test_c1(
c1 VARCHAR(65535)
) ENGINE=INNODB CHARACTER SET utf8;
/* 执行结果 */
错误代码:1074
Column length too big for column 'c1' (max = 21845); use BLOB or TEXT instead

但是改为21845依旧报错,原因你仔细品(提示varchar)

CREATE  TABLE  test_c1(
c1 VARCHAR(21845)
) ENGINE=INNODB CHARACTER SET utf8;/* 执行结果依旧报错 */
错误代码:1118
Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

那,在减小一位试试

CREATE  TABLE  test_c1(
c1 VARCHAR(21844)
) ENGINE=INNODB CHARACTER SET utf8;
/* 终于成功了*/
查询:create table test_c1( c1 varchar(21844) ) engine=innodb character set utf8共 0 行受到影响

有图有真相

3.2 测试latin字符集

因为utf8编码占3位,因此最大长度只能是21845(-1),那么latin字符集是不是就能达到65535了

测试如下

CREATE  TABLE  test_c1(
c1 VARCHAR(65535)
) ENGINE=INNODB CHARACTER SET latin1
/* 结果依旧失望 */
错误代码:1118
Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

在想想上面的情况,一直减下去,发现65532即可正常(原因你继续品就明白了)

CREATE  TABLE  test_c1(
c1 VARCHAR(65532)
) ENGINE=INNODB CHARACTER SET latin1;
/* 终于成功了 */
<n>查询:create table test_c1( c1 varchar(65532) ) engine=innodb character set latin1共 0 行受到影响

给真相

3. 小结

实践出真知,任何人说的知识点都要思考,必要的时候自己检验一番。

表字段限制

表字段长度限制

在此知识给个匆忙的小结,其中原因不懂的可以查看官方文档,也是详细的测试,也可以加群一起讨论。

注程序员闪充宝后台回复“666”和“111免费领取46阶段以及实战java视频资料,回复“2020”领取java最新面试资料


好文章,我在看❤️

MySQL一张表到底能放多少个字段?相关推荐

  1. 关于mysql一张表到底能存多少数据?

    前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...

  2. mysql 把表的值用来计算_mysql一张表到底能存多少数据?

    前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...

  3. 一个mysql可以存多少数据类型_mysql一张表到底能存多少数据?

    前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...

  4. mysql导出oracle_如何将mysql中的表结构导出放入oracle中

    展开全部 将mysql中的表结构导出放入oracle中的方法: 1.导出mysql的表结构sql脚本,然后修改mysql中的数据类型为oracle中的数据类型: MySql与Oracle数据类型的62 ...

  5. mysql一张表100亿条数据_一个表有100亿条记录,如何优化

    我们的数据库还在设计阶段.我们预计数据量将会很大,一年的时间里,一张表,就会产生100亿条数据,表结构,如下id,userid,createddate,等等正常情况下,100亿条记录如果都存在一个表里 ...

  6. MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表

    MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表 有两张表,info1, info2 . info1: info2: 方式一:要用info2中的 ...

  7. mysql两张表关联修改

    mysql两张表关联修改 两张表的字段code是相同的,然后code作为关联参数来关联两表,将user2 中的name写入到user1 的name中,三表,四表,多表都是一个道理 UPDATE use ...

  8. mysql某张表一直卡死,排查原因和问题解决

    mysql某张表一直卡死 查看哪些运行的命令造成,如sql语句等 select id, db, user, host, command, time, state, info from informat ...

  9. mysql 同一张表 某个字段更新到另一条数据上_面试基础:数据库MySQL基础入门(下)...

    本文是面试基础的第二篇.本篇偏理论,包括三节: 事务和并发 数据库设计 索引 所选的三个内容均是面试的高频考察点,需要细致地理解 No.1     事务和并发 事务:数据库操作的基本单元.对于数据库的 ...

最新文章

  1. 业界资讯:Alternativa 3D 7 免费
  2. oracle怎么将一列挪到另一列,详细讲解Oracle数据库的数据迁移方法
  3. 优秀的软件测试人员应该具备的素质
  4. SqlServer学习笔记【暂】
  5. jQuery操作DOM元素案例
  6. 【ElasticSearch】Es 源码之 LicenseService 源码解读
  7. 从 RequireJs 源码剖析脚本加载原理
  8. 基于python的测试报告自动化生成
  9. android入门问题--R文件丢失
  10. 单幅RGB图像+Depth深度图得到点云模型示例
  11. 2021最新最细致的IDEA集成SVN工具的使用 (入门到精通)
  12. STM32F 驱动WS2812B (3) SPI+DMA
  13. 抠图应用程序设计(二)——磁性套索工具Livewire算法的实现
  14. linux查看tomcat 控制台,linux 下查看Tomcat的状态,以及开启停止服务命令
  15. 信号与系统_第2章 连续系统的时域分析
  16. 前端设计-css网格布局的最佳实践
  17. web开源框架大汇总
  18. 关于RGBFusion无法识别和控制技嘉显卡RGB灯的特殊案例和解决办法
  19. Pytorch随记(3)
  20. 基于MATLAB的神经网络训练的车牌识别系统

热门文章

  1. ajaxfileupload上传文件问题
  2. Windows下Linux子系统的安装与使用 wsl
  3. Github pages 同步到Gitee pages 并自动更新Gitee pages
  4. JAVA安装与配置教程
  5. 白天、暗夜双重模式+自作潜水俱乐部前端小项目+学习经验总结(一)
  6. linux sftp 设置根目录,FTP,SFTP服务器登录权限和根目录的设置
  7. MySQL索引认知-2
  8. 教你怎么给心爱的她自动定时发送消息!超级简单!
  9. 电脑装linux当服务器吗,笔记本电脑装linux服务器和Windows, 一机两用
  10. 自动化实现携程预约抢票