在 Laravel 6 中的数据库迁移中,SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name ‘theme_installation_version_preset_theme_store_theme_version_id_index’ is too long

1、在执行数据库迁移时,报错:SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name ‘theme_installation_version_preset_theme_store_theme_version_id_index’ is too long 。如图1

图1

   Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'theme_installation_version_preset_theme_store_theme_version_id_index' is too long (SQL: alter table `theme_installation_version_preset` add index `theme_installation_version_preset_theme_store_theme_version_id_index`(`theme_store_theme_version_id`))

2、MySQL 5.7 的索引长度限制默认为 64 ,而 theme_installation_version_preset_theme_store_theme_version_id_index 的长度为 68。如图2

图2

3、在 Laravel 6 中,每个索引方法都接受一个可选的第二个参数来指定索引的名称。如果省略,名称将根据表和列的名称生成。最终决定明确指定索引的名称:tivp_theme_store_theme_version_id_index。表名称仅使用首字母。

$table->unsignedBigInteger('theme_store_theme_version_id')->comment('主题商店的主题版本ID')->index();
$table->unsignedBigInteger('theme_store_theme_version_id')->comment('主题商店的主题版本ID')->index('tivp_theme_store_theme_version_id_index');

4、迁移执行成功。

永夜