Laravel 迁移主(或键)“标识符名称太长”

问题描述 投票:0回答:2

我有简单的 Laravel 迁移文件,指定了复合主键:

// ...

public function up()
{
    Schema::create('my_super_long_table_name', function($table)
    {
        $table->integer('column_1');
        $table->integer('column_2');
        $table->integer('column_3');

        $table->primary(['column_1', 'column_2', 'column_3']);
    });
}

// ...

运行时

php artisan migrate
会抛出此错误:

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'my_super_long_table_name_column_1_column_2_column_3' is too long
mysql laravel migration
2个回答
71
投票

创建时只需指定键名(第二个参数为

primary
)。

$table->primary(['column_1', 'column_2', 'column_3'], 'my_long_table_primary');

接下来,

如果修改后出现类似

You have an error in your SQL syntax ...
的错误,请确保您的键名没有使用数据库引擎的保留字。

例如MySQL:http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

提示:

primary
是保留的,所以不要使用它;)


0
投票

这就是解决方案:更改列的排序规则名称


public function up()
{
   Schema::create('my_super_long_table_name', function($table)
   {
      $table->integer('column_1')->collation('utf8_general_mysql500_ci');
      $table->integer('column_2')->collation('utf8_general_mysql500_ci');
      $table->integer('column_3')->collation('utf8_general_mysql500_ci');
      $table->primary(['column_1', 'column_2', 'column_3']);
   });
}
© www.soinside.com 2019 - 2024. All rights reserved.