今天用mysql innoDB建了个有256字段的大表。。。。
别问为什么,老业务就是这样的。。
然后就陆陆续续报了各种魔幻性错误:
1.正常给各种字段赋予 varchar int 等类型时,它会报错
DN varchar(32) null
KC varchar(32) null
PAT varchar(32) null
AN varchar(32) null
ANS varchar(32) null
ADY varchar(32) null
AD varchar(32) null
PR varchar(32) null
EPRD varchar(32) null
PN varchar(32) null
PDY varchar(32) null
PD varchar(32) null
BN varchar(32) null
ZLH varchar(32) null
DAN varchar(32) null
TI varchar(32) null
SIC varchar(32) null
SICN varchar(32) null
.....还有很多字段
Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Got error 139 - 'Too big row' from storage engine
2.然后根据提示,一股脑改成text
DN text null
KC text null
PAT text null
AN text null
ANS text null
ADY text null
AD text null
PR text null
EPRD text null
PN text null
PDY text null
PD text null
BN text null
ZLH text null
DAN text null
TI text null
SIC text null
仍然报错。。。
Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Got error 139 - 'Too big row' from storage engine
解决方法,表的引擎换成MyISAM即可
-- auto-generated definition
create table p_patent_txt
(
id varchar(32) not null
primary key ,
DN text null comment '文献号' ,
KC text null comment '公开类型' ,
PAT text null comment '专利类型' ,
AN text null comment '申请号' ,
ANS text null comment '申请号统计'
)engine=MyISAM;
注意:
MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。
1)InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。
2)MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用
3)InnoDB支持外键,MyISAM不支持
4)从MySQL5.5.5以后,InnoDB是默认引擎
5)InnoDB不支持FULLTEXT类型的索引
6)InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表
7)对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引
8)清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表
9)InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’。
部分转自InnoDB 与 MyISAM对比_网友(匿名用户)职场问答-职Q!