我有这样结构的一个表
create table PrimaryStandardSubstance
(
1 int not null auto_increment,
2 varchar(50) not null,
3 char(2) not null,
4 varchar(50),
5 varchar(50) not null,
6 varchar(200),
7 varchar(50),
8 varchar(100),
9 varchar(50),
10 varchar(50),
11 float,
12 varchar(250),
13 varchar(50),
14 varchar(400),
15 varchar(1000),
16 varchar(50),
17 varchar(3000),
18 varchar(250),
19 varchar(1000),
20 varchar(1000),
21 varchar(1000),
22 text,
23 varchar(50),
24 varchar(1000),
25 varchar(50),
26 varchar(500),
27 varchar(200),
28 text,
29 text,
30 text,
31 text,
32 text,
tlcDep text,
gcDep text,
lcDep text,
solventLeft text,
highTemp text,
oxygenate text,
preparationTech text,
reference text,
primary key (1)
);数字代表特定的列名,我是分步进行插入的,前面三步将1-32的数据全部插入到一条记录中了,第四步时,插入后面几个text中的除最后一个reference那条记录,提示Got error 139 from storage engine,一说是MYSQL每条记录不能超过8K,但不算text字段,那为什么会出现插入text列时候出现这个问题呢?一说text不能超过15个,但我数了数也没超过15个啊(才14个)。请问不改变数据库结构的情况下有什么较好的解决办法吗?我用的是MYSQL 5.0.18-nt。
create table PrimaryStandardSubstance
(
1 int not null auto_increment,
2 varchar(50) not null,
3 char(2) not null,
4 varchar(50),
5 varchar(50) not null,
6 varchar(200),
7 varchar(50),
8 varchar(100),
9 varchar(50),
10 varchar(50),
11 float,
12 varchar(250),
13 varchar(50),
14 varchar(400),
15 varchar(1000),
16 varchar(50),
17 varchar(3000),
18 varchar(250),
19 varchar(1000),
20 varchar(1000),
21 varchar(1000),
22 text,
23 varchar(50),
24 varchar(1000),
25 varchar(50),
26 varchar(500),
27 varchar(200),
28 text,
29 text,
30 text,
31 text,
32 text,
tlcDep text,
gcDep text,
lcDep text,
solventLeft text,
highTemp text,
oxygenate text,
preparationTech text,
reference text,
primary key (1)
);数字代表特定的列名,我是分步进行插入的,前面三步将1-32的数据全部插入到一条记录中了,第四步时,插入后面几个text中的除最后一个reference那条记录,提示Got error 139 from storage engine,一说是MYSQL每条记录不能超过8K,但不算text字段,那为什么会出现插入text列时候出现这个问题呢?一说text不能超过15个,但我数了数也没超过15个啊(才14个)。请问不改变数据库结构的情况下有什么较好的解决办法吗?我用的是MYSQL 5.0.18-nt。
-> (
-> `1` int not null auto_increment,
-> `2` varchar(50) not null,
-> `3` char(2) not null,
-> `4` varchar(50),
-> `5` varchar(50) not null,
-> `6` varchar(200),
-> `7` varchar(50),
-> `8` varchar(100),
-> `9` varchar(50),
-> `10` varchar(50),
-> `11` float,
-> `12` varchar(250),
-> `13` varchar(50),
-> `14` varchar(400),
-> `15` varchar(1000),
-> `16` varchar(50),
-> `17` varchar(3000),
-> `18` varchar(250),
-> `19` varchar(1000),
-> `20` varchar(1000),
-> `21` varchar(1000),
-> `22` text,
-> `23` varchar(50),
-> `24` varchar(1000),
-> `25` varchar(50),
-> `26` varchar(500),
-> `27` varchar(200),
-> `28` text,
-> `29` text,
-> `30` text,
-> `31` text,
-> `32` text,
-> tlcDep text,
-> gcDep text,
-> lcDep text,
-> solventLeft text,
-> highTemp text,
-> oxygenate text,
-> preparationTech text,
-> reference text,
-> primary key (`1`)
-> );
Query OK, 0 rows affected (0.11 sec)mysql>
corresponds to your MySQL server version for the right syntax to use near '1
int not null auto_increment,
2 varchar(50) not null,
3 char(2) no' at line 3数字不能做为字段名,表名。如果一定要用则需要用反引号`标识
你根本还没有明白我想问的,1-32只是我替换了原来数据库的列名,我想问的是在插入数据的时候后面为什么会出现Got error 139 from storage engine
“前面三步将1-32的数据全部插入到一条记录中了,第四步时,插入后面几个text中的除最后一个reference那条记录,提示Got error 139 from storage engine,一说是MYSQL每条记录不能超过8K,但不算text字段,那为什么会出现插入text列时候出现这个问题呢?一说text不能超过15个,但我数了数也没超过15个啊(才14个)。请问不改变数据库结构的情况下有什么较好的解决办法吗?我用的是MYSQL 5.0.18-nt。”
我看了mysql5.1的文档,它说它的页大小默认为16KB,而最大行长度不能超过8000,即一页的一半小一点。InnoDB在行中存储VARCHAR,BLOB或TEXT列的前768字节,余下的存储的分散的页面中。那么上面那张表是不是需要分成三张表来存储呢?而为什么大小为16KB,而最大行长度(这是指每条记录的长度吗?)才8000呢?