错误:“ SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2019-08-27 20:33:45

标签: mysql laravel laravel-migrations

我遇到了Laravel MySQL迁移问题。

迁移:

 public function up()
{
    Schema::create('capsule_packages', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->tinyInteger('type')->unsigned();
        $table->json('data')->nullable();
        $table->decimal('price', 19, 4);
        $table->text('description')->nullable();
        $table->timestamps();
    });
}

错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有一个错误;请参见语法。检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在'json null,price十进制(19,4)不为null,description文本null,created_at' at line 1 (SQL: create table capsule_packages { {1}} id (名称int unsigned not null auto_increment primary key,类型varchar(255) not null,数据tinyint unsigned not null,价格json null,描述decimal(19, 4) not null, created_at text null, updated_at`时间戳为空)默认字符集utf8整理为'utf8_unicode_ci')

1 个答案:

答案 0 :(得分:1)

这可能是由于您的Completable版本。进行了一些挖掘,从Laravel 5.2开始,<td data-order=<fmt:formatDate pattern = "yyyy-MM-dd" value = "${myObject.myDate}" />>${myObject.myDate}</td> 方法将尝试在数据库中创建实际的MySQL字段。但是,在您的示例中,$table->json()在当前的MySQL版本中不可用。您只能在MySQL版本json及更高版本中使用此字段。如果您使用的版本低于此版本,则可以通过创建json字段而不是5.7.8.来解决此错误。

您可以在错误代码中看到它:

  

您的SQL语法有错误;检查手册   对应于您的MariaDB服务器版本,以在 json

附近使用正确的语法

来源:dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html#mysqld-5-7-8-json

编辑:

根据textjson及更低版本,不支持MariaDB数据类型

来源:github.com/laravel/framework/issues/13622