Laravel 5修改列类型报错:SQL语法错误1064如何解决?
解决Laravel 5中修改字段为无符号整数的SQL语法错误
嘿,这个问题我之前也碰到过!Laravel 5的Schema Builder在处理字段类型变更的时候,有时候会生成有问题的SQL,就像你看到的那样——错误地把DEFAULT和NOT NULL拼接在一起,这MySQL肯定会抛出语法错误。
下面给你几个可行的解决办法:
直接使用原生SQL语句:绕过Schema Builder的bug,直接执行原生ALTER TABLE语句是最稳妥的方式。在迁移文件里这样写:
DB::statement('ALTER TABLE questions MODIFY category_id INT UNSIGNED NOT NULL;');如果你原来的字段允许为NULL,就把
NOT NULL去掉,改成NULL即可。明确指定默认值(如果需要):如果你的字段需要保留默认值,在修改的时候要明确声明,避免Schema Builder生成错误的SQL片段。比如原字段默认值为0:
Schema::table('questions', function(Blueprint $table) { $table->integer('category_id')->unsigned()->default(0)->change(); });这样Laravel就会生成正确的SQL,不会出现
DEFAULT NOT NULL这种错误组合。先删除原字段再重建(极端情况):如果上面两种方法都不行,你可以先删除原字段,再重新添加带unsigned约束的字段(注意先备份数据,或者确保字段可以重建):
Schema::table('questions', function(Blueprint $table) { $table->dropColumn('category_id'); $table->integer('category_id')->unsigned(); });这种方法要谨慎,因为会丢失字段里的现有数据,除非你已经做好了数据迁移或者字段是空的。
内容的提问来源于stack exchange,提问作者galactic.nucleus
相关产品推荐
相关产品推荐

