我的迁移看起来像这样
Schema::create('reports', function (Blueprint $table) {
$table->bigincrements('id');
$table->json('options');
});
我收到此错误:
SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;
检查与您的MariaDB服务器版本对应的手册,以便在'json not null附近使用正确的语法'默认字符集utf8 collate utf8_unicode_ci'在第1行
如果我删除$table->json('options');
则没有错误。
Laravel 5.3文档提到了这个https://laravel.com/docs/5.3/migrations所以我没有做错什么,为什么我收到这个错误的任何想法?
我正在使用支持json类型的MariaDB版本10.1.16。
答案 0 :(得分:2)
MariaDB以两种方式支持JSON,这两种方式都不是"数据类型"。 Laravel($table->json(...)
)未捕获该错误,因为其他数据库确实具有JSON 数据类型。
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文件另存为字符串,然后在从数据库中检索时解析它们。