SQL表可以具有的最大列数是多少?

时间:2019-10-11 11:39:36

标签: php sql laravel

我正在为我的Web应用程序使用Laravel。我正在使用git subtree split --prefix=foo/bar -b split git push repo_url_sub split:refs/for/master 迁移表。

该表有316列,其中有150个浮点列和150+个字符串列

php artisan migrate

我遇到以下错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1118行大小太大。-已使用表类型的最大行大小(不计BLOB)为65535。这包括存储开销,请检查manualSQLSTATE [42000]:语法错误或访问冲突:1118行大小太大。不包括BLOB在内的已使用表类型的最大行大小为65535。这包括存储开销,请查阅手册

2 个答案:

答案 0 :(得分:3)

问题的最后一行说,您应该检查手册,阅读Limits on Table Column Count and Row Sizerow size limits

  

MySQL的硬限制是每个表4096列,但是有效   对于给定的表,最大值可能较小。确切的列限制取决于   有几个因素:

     

表的最大行大小限制了该数字(并且可能限制   列),因为所有列的总长度不能超过   这个大小。请参阅行大小限制。

     

单个列的存储要求限制了   符合给定最大行大小的列。储存要求   某些数据类型取决于存储引擎,存储等因素   格式和字符集。请参阅数据类型存储要求。

     

存储引擎可能会施加限制表的其他限制   列数。例如,InnoDB每个限制为1017列   表。请参阅InnoDB表的限制。有关其他的信息   存储引擎,请参阅备用存储引擎。

     

每个表都有一个.frm文件,其中包含表定义。的   定义可能会影响文件内容的方式   表中允许的列数。参见第12.6节,   “ .frm文件结构施加的限制”。

所以基本上,这取决于存储引擎,存储格式和字符集

答案 1 :(得分:0)

这是关于每行多少个字节而不是多少列。最大列数因列类型而异,因为每种类型都占用特定的字节数。

我建议您更改数据库模型,并将这些列作为外部表中的行。您将有一个引用table_name的{​​{1}}和table_name_columns