You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel执行migration迁移报错SQLSTATE[42000]标识符名称过长

问题成因

MySQL、MariaDB 等主流关系型数据库对所有标识符(表名、字段名、索引名、外键名等)有明确的长度限制,默认最大允许长度为64个字符。
你在迁移中定义复合索引时传入了11个字段,且没有手动指定索引名称,Laravel 会自动按照表名_字段1_字段2_..._字段N的拼接规则生成默认索引名,本次拼接出的索引名长度远超64字符的上限,因此触发1059标识符过长的报错。
另外你的代码还存在一个隐藏问题:索引数组中包含rotation_shift_id字段,但当前表结构中并未定义该字段,即使解决索引名长度问题,后续迁移仍会报字段不存在的错误。

修复方法
  • 手动为复合索引指定自定义短名称:调用index()方法时传入第二个参数作为自定义索引名,只要名称长度不超过64字符即可,修改后的索引定义代码如下:
$table->index([
    'department_id', 'user_id', 'schedule_type_id', 'company_id', 'added_by','schedule_start_date',
    'schedule_end_date', 'rotation_scheme_id', 'rotational_schedule_period_from', 'rotational_schedule_period_to',
    'rotation_shift_id'
], 'schedules_multi_query_idx');
  • 处理缺失字段问题:要么在表结构中补上rotation_shift_id的字段定义,要么将该字段从索引的字段数组中移除。
  • 同类问题扩展:如果后续定义外键时也遇到自动生成的外键名过长问题,同样可以在调用foreign()方法时传入第二个参数指定自定义外键名,避免触发同类长度限制错误。

内容的提问来源于stack exchange,提问作者Arctic Fox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:48:23