Error: "SQLSTATE[42000]: Syntax error or access violation: 1064
Error: "SQLSTATE[42000]: Syntax error or access violation: 1064
我遇到了 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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'json null, price
decimal(19, 4) not null, description
text null, created_at' at line 1 (SQL: create table
capsule_packages(
idint unsigned not null auto_increment primary key,
namevarchar(255) not null,
typetinyint unsigned not null,
datajson null,
pricedecimal(19, 4) not null,
descriptiontext null,
created_attimestamp null,
updated_at` timestamp null) default character set utf8 collate 'utf8_unicode_ci')
这可能是因为您的 MySQL
版本。做了一些挖掘,似乎自 Laravel 5.2 以来,$table->json()
方法将尝试在数据库中创建一个实际的 json
字段。但是,在您的示例中,json
在您当前的 MySQL 版本中不可用。您只能在 MySQL 版本 5.7.8.
及更高版本中使用此字段。如果您使用的版本低于此版本,则可以通过创建 text
字段而不是 json
.
来解决此错误
您可以在错误代码中看到这一点:
You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near json
来源:dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html#mysqld-5-7-8-json
编辑:
根据 MariaDB
版本 10.1.x
及更低版本不支持 json
数据类型
我遇到了 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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'json null,
price
decimal(19, 4) not null,description
text null,created_at' at line 1 (SQL: create table
capsule_packages(
idint unsigned not null auto_increment primary key,
namevarchar(255) not null,
typetinyint unsigned not null,
datajson null,
pricedecimal(19, 4) not null,
descriptiontext null,
created_attimestamp null,
updated_at` timestamp null) default character set utf8 collate 'utf8_unicode_ci')
这可能是因为您的 MySQL
版本。做了一些挖掘,似乎自 Laravel 5.2 以来,$table->json()
方法将尝试在数据库中创建一个实际的 json
字段。但是,在您的示例中,json
在您当前的 MySQL 版本中不可用。您只能在 MySQL 版本 5.7.8.
及更高版本中使用此字段。如果您使用的版本低于此版本,则可以通过创建 text
字段而不是 json
.
您可以在错误代码中看到这一点:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near json
来源:dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html#mysqld-5-7-8-json
编辑:
根据 MariaDB
版本 10.1.x
及更低版本不支持 json
数据类型