2016-03-16 41 views
1

目前我在Laravel這種遷移是失敗的:Laravel - 表遷移crror與未簽名的主鍵

public function up() 
{ 
    Schema::create('site_permission_modules', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->timestamps(); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('site_permission_modules'); 
} 

所顯示的錯誤如下:

SQLSTATE[HY000]: General error: 1005 Can't create table 'orgasystem.site_permission_modules' (errno: 150) (SQL: create table site_permission_modules (id int unsigned not null auto_increment primary key, name var char(255) not null, created_at timestamp null, updated_at timestamp null) default character set utf8 collate utf8_unicode_ci)

我有很多其他正在成功的表格沒有任何問題。

當我複製SQL語句Laravel引發到MySQL時,它也失敗,但一旦我刪除主鍵上的unsigned關鍵字,它會成功。見下面的聲明。

失敗:

create table `site_permission_modules` (
    `id` int unsigned not null auto_increment primary key, 
    `name` varchar(255) not null, 
    `created_at` timestamp null, 
    `updated_at` timestamp null) 
default character set utf8 collate utf8_unicode_ci; 

成功:

create table `site_permission_modules` (
    `id` int not null auto_increment primary key, 
    `name` varchar(255) not null, 
    `created_at` timestamp null, 
    `updated_at` timestamp null) 
default character set utf8 collate utf8_unicode_ci; 

有誰知道爲什麼會發生這種情況?

+0

你的php和mysql版本? – nextt1

+0

使用你的「失敗」的SQL,它在我的MySQL上工作得很好。也許你應該檢查你的mysql版本。 – lcjury

+0

您的「失敗」SQL看起來不錯,並且也在我的MySQL(版本5.6.26)上工作。 –

回答

0

原來,答案是MySQL版本過低,而在MySQL 5.5版上運行MAMP時,遷移無法正常工作。我已經測試了版本5.7的遷移,併成功運行了所有的遷移。

然而,這並沒有讓我困惑,因爲我在做同樣版本的MAMP時完成了其他Laravel遷移。

這可能是MySQL首先在我測試的機器上默認的引擎,遺憾的是我現在無法測試它。