【发布时间】:2014-05-03 11:34:06
【问题描述】:
我要创建一个325列的表:
CREATE TABLE NAMESCHEMA.NAMETABLE
(
ROW_ID TEXT NOT NULL , //this is the primary key
324 column of these types:
CHAR(1),
DATE,
DECIMAL(10,0),
DECIMAL(10,7),
TEXT,
LONG,
) ROW_FORMAT=COMPRESSED;
我用文本替换了所有的VARCHAR,并在MySQL的my.ini文件中添加了Barracuda,这是添加的属性:
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_file_format_check = ON
但我仍然有这个错误:
Error Code: 1118
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.
编辑:我无法更改数据库的结构,因为它是旧版应用程序/系统/数据库。新表的创建,它是旧数据库的导出。
EDIT2:我写的这个问题与其他问题相似,但里面有一些我在互联网上找到的解决方案,如 VARCHAR 和梭子鱼,但我仍然有这个问题,所以我决定打开一个新问题,里面已经有经典答案看看是否有人有其他答案
【问题讨论】:
-
将
TEXT列作为主键听起来真的很奇怪。为什么不使用整数或“常规”varchar列? -
@pathikrit 我已经写了 EDIT 2,在那里我解释了为什么我创建了这个问题。对我来说,它相似但不是真正的重复,但如果它是重复的,我必须做什么?我必须删除它吗?
-
你的描述中有两个模糊的东西。请提供
SHOW CREATE TABLE,但您可以省略大部分 324。 -
如果您“跨列展开数组”,请参阅解决问题的“正确”方法:stackoverflow.com/a/46714384/1766831
-
如果不是日志文件限制...将类型从 longtext 更改为 text 或 blob 会有所不同吗?
标签: mysql sql create-table