我正在为我的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。这包括存储开销,请查阅手册
答案 0 :(得分:3)
问题的最后一行说,您应该检查手册,阅读Limits on Table Column Count and Row Size和row size limits
MySQL的硬限制是每个表4096列,但是有效 对于给定的表,最大值可能较小。确切的列限制取决于 有几个因素:
表的最大行大小限制了该数字(并且可能限制 列),因为所有列的总长度不能超过 这个大小。请参阅行大小限制。
单个列的存储要求限制了 符合给定最大行大小的列。储存要求 某些数据类型取决于存储引擎,存储等因素 格式和字符集。请参阅数据类型存储要求。
存储引擎可能会施加限制表的其他限制 列数。例如,InnoDB每个限制为1017列 表。请参阅InnoDB表的限制。有关其他的信息 存储引擎,请参阅备用存储引擎。
每个表都有一个.frm文件,其中包含表定义。的 定义可能会影响文件内容的方式 表中允许的列数。参见第12.6节, “ .frm文件结构施加的限制”。
所以基本上,这取决于存储引擎,存储格式和字符集
答案 1 :(得分:0)
这是关于每行多少个字节而不是多少列。最大列数因列类型而异,因为每种类型都占用特定的字节数。
我建议您更改数据库模型,并将这些列作为外部表中的行。您将有一个引用table_name
的{{1}}和table_name_columns
。