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

Posted

技术标签:

【中文标题】Laravel 迁移主(或键)“标识符名称太长”【英文标题】:Laravel migration primary (or key) "Identifier name is too long" 【发布时间】:2015-04-22 00:13:48 【问题描述】:

我有一个简单的 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

【问题讨论】:

如果您可以指定要从中迁移的确切版本以及要迁移到的版本,这可能会有所帮助。 laravel 中的迁移是一个定义数据库结构的文件。不是从一个版本到另一个应用程序的“真正”迁移过程。 【参考方案1】:

创建时只需指定键名(第二个参数为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 是保留的,所以不要使用它;)

【讨论】:

不错!它也适用于外键$table->foreign('foreign_column', 'fk_name')->references('id')->on('foreign_table'); 在模型中定义关系时,是否也需要指定FK名称?

以上是关于Laravel 迁移主(或键)“标识符名称太长”的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Laravel 4 中拥有可变数量的 URI 参数或键值对吗?

Laravel 4:如何使用迁移创建非主自动递增列?

laravel 5 迁移向我的数据库表添加了一些主键。怎样防止形成呢?

在 laravel 迁移中更改主 ID

Laravel 7 迁移:语法错误或访问冲突:1068 定义了多个主键

laravel 迁移在不是主要的时候使用自动增量