问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySQL的一个表最多可以有多少个字段

发布网友 发布时间:2022-05-03 07:31

我来回答

2个回答

懂视网 时间:2022-05-03 11:52

!/usr/bin/python # coding=utf-8 import pymysql as mdb import os sor_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 - 1 print "Mysql Error %d: %s" % (e.args[0], e.args[1]) print "MySQL has a limit of %d" %(v_cnt) break v_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 time

sor_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 - 1
  print "Mysql Error %d: %s" % (e.args[0], e.args[1])
  print "MySQL has a limit of %d" %(v_cnt)
  break
 v_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. 小结

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

表字段限制

技术图片

 

表字段长度限制

技术图片

 

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

 

MySQL到底能有多少个字段

标签:sqlyog   odi   arc   类型   长度   varchar   div   exists   img   

热心网友 时间:2022-05-03 09:00

您好:
在MySQL中,每个数据库最多可创建20亿个表。
一个表允许定义1024列。
每行的最大长度为8092字节(不包括文本和图像类型的长度)
但一般用几十个字段已经很多了。
字段越多,性能越差。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
抖音弹幕怎么关掉?怎么关闭抖音弹幕? 惠普LaserJet P3005D是否支持B5纸的双面打印? word打印出图片总是缺一部分怎么办-word打印图片不完整怎么解决_百度... 理想one哪里产的车辆? 抚州抚州ONE在哪里? one地址在哪里? 如何在图片上写字(如何在图片上添加文字) 网商贷为什么钱没到账 高级经济师职称怎么评 高级经济师需要评审吗 天猫买东西支付宝红包扣钱需要还款吗? 支付宝送5元红包限定只能在天猫实物店用要怎么用啊。不会。求解 我的支付宝红包没有使用说明,淘宝,天猫买东西付款都没有红包选项,怎么用? 支付宝领取的红包 在天猫能用淘宝还是在淘宝能用 怎么用 求赐教 手机支付宝在天猫上购物,支付宝红包是怎样使用的 手机支付宝有一个10元的淘宝限时惊喜红包,可以在天猫买东西吗?还是只能在淘宝里买? 战国四公子谁最厉害,排名不分先后? 战国四公子之首到底有多厉害 战国四公子中谁的能力最高 战国四君子谁的能力最强?信陵君、孟尝君、平原君、春申君,为什么司马迁唯独对信陵君的评价最高? “战国四公子”中,为何信陵君最有作为呢? 怎样登记食品临期货 谁有雀巢咖啡临期货吗 你们在哪个平台期货开户比较多? 劳力士手表后盖上有logo吗? 劳力士手表后盖板上有什么标志吗? 梦见自己的大脚趾变成了两个,后来自己把那个多出来的给扯掉了,这是什么梦? 大众朗逸1.6如何更换刹车油 朗行跑多少需要换刹车油 上下班交通安全注意事项有哪些 我的电脑配置选多大的显示屏好? 苹果平板电脑上的梦幻花园游戏打不开老提示无网络怎么回事? 问下大家,陈皮普洱茶和普通的普洱茶有什么区别?在功效方面。 宫廷普洱和陈普的区别 勉励人勤奋向上的名人名言 补齐短板的名言名句 劝人心胸宽广的名言 鼓志的名人名言 加上人名 宽容,礼让的名言 名言名句带人名 关于正确对待‘得与失’的名言熟语 快··· 宽以待人的名言名句 豁达胸怀的名言 跪求一个超拽的QQ个性签名啊!!!一定要拽的 求 有关“谨言慎行”的名人名言! qq个性签名很长,超拽的 丹东都有哪些好玩的地方与美食 丹东小吃什么特色美食 丹东美食 丹东的特色美食与小吃