MySQL到底能有多少个字段?

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

MySQL到底能有多少个字段?

文章插图
 
 2. 测试表字段数限制2.1 测试innodb引擎表因官方文档介绍了innodb表字段限制是1017,因此可以写程序进行模拟 。思路如下:
a) 创建一张1个 char(1) 类型的innodb表
b) 循环往该表新增字段 直至报错
我使用的是Python 脚本进行测试,脚本如下:
#!/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到底能有多少个字段?

文章插图
 
【MySQL到底能有多少个字段?】 
因此,官方文档中介绍的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,那么这个是确定的么,因此再次做一次测试 。


推荐阅读