在迁移

时间:2016-09-23 18:03:55

标签: laravel mariadb

我的迁移看起来像这样

    Schema::create('reports', function (Blueprint $table) {
        $table->bigincrements('id');
        $table->json('options');
    });

我收到此错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;

     

检查与您的MariaDB服务器版本对应的手册,以便在'json not null附近使用正确的语法'默认字符集utf8 collat​​e utf8_unicode_ci'在第1行

如果我删除$table->json('options');则没有错误。

Laravel 5.3文档提到了这个https://laravel.com/docs/5.3/migrations所以我没有做错什么,为什么我收到这个错误的任何想法?

我正在使用支持json类型的MariaDB版本10.1.16。

3 个答案:

答案 0 :(得分:2)

MariaDB以两种方式支持JSON,这两种方式都不是"数据类型"。 Laravel($table->json(...))未捕获该错误,因为其他数据库确实具有JSON 数据类型

  • Json table type(10.0.16)讨论了如何使用" Connect"将Json编码的文件挂钩到MariaDB。
  • Dynamic Columns(10.0.1)在封面下使用BLOB,并使用函数COLUMN_JSON将该列解释为Json。

MariaDB是否选择Oracle 5.7's JSON datatype(5.7.8)是一个推测问题。

答案 1 :(得分:1)

我四处寻找解决方案。

假设您的MariaDB版本是正确的,它似乎不支持它。我确实在laravel repo上发现了一个封闭的GitHub问题,this comment个州

MariaDB 10.2 supported JSON. (Alpha version. Not recommended by Maria to production server. 
Only testing.)

MariaDB 10.1 do not support JSON (

所以我建议您的MariaDB版本错误,或者实际上不支持JSON列。

答案 2 :(得分:1)

我相信您的数据库不支持JSON

您可以创建文本并将json文件另存为字符串,然后在从数据库中检索时解析它们。