SQLSTATE [42000]:语法错误或访问冲突:1064 在进行迁移时,您的 SQL 语法有错误
Posted
技术标签:
【中文标题】SQLSTATE [42000]:语法错误或访问冲突:1064 在进行迁移时,您的 SQL 语法有错误【英文标题】:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax in while doing migration 【发布时间】:2020-05-01 21:24:49 【问题描述】:当我跑步时
php artisan migrate
以下是我的架构
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::table('pages', function (Blueprint $table)
$table->string('url')->unique()->after('id');
$table->string('type')->after('meta_data');
$table->json('meta_data')->change();
$table->unsignedInteger('status_id')->default(3)->after('type');
$table->boolean('is_active')->default(false)->after('status_id');
$table->engine = 'InnoDB';
// Foreign Key
$table->foreign('status_id')
->references('id')->on('statuses')
->onDelete('cascade');
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::table('pages', function (Blueprint $table)
$table->dropColumn('is_active');
$table->dropColumn('status_id');
$table->dropColumn('type');
$table->dropColumn('url');
);
显示以下错误
Illuminate\Database\QueryException : SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的“CHARACTER SET utf8mb4 NOT NULL”附近使用正确的语法(SQL:ALTER TABLE pages CHANGE meta_data meta_data JSON CHARACTER SET utf8mb4 NOT NULL)
【问题讨论】:
metadata
列已添加到areas
表中?
不,没有添加。
部分Previous
版本的mySQL
无法在JSON
中定义字段,因此您可以将其更改为LongText
。 $table->longText('metadata')->nullable();
我正在使用mySQL
版本` 5.7.26` 但我想以json
格式保存数据
@AbhishekPakhare 如果你在 longText
中定义字段,你也可以将 json 值存储到它,我以前用过这个。
【参考方案1】:
Schema::table('pages', function (Blueprint $table)
$table->string('url')->unique()->after('id');
$table->string('type')->after('meta_data');
$table->longText('meta_data')->change(); //changed to longText
$table->unsignedInteger('status_id')->default(3)->after('type');
$table->boolean('is_active')->default(false)->after('status_id');
$table->engine = 'InnoDB';
// Foreign Key
$table->foreign('status_id')
->references('id')->on('statuses')
->onDelete('cascade');
);
在这种情况下,您可以将 json 值存储到 metadata
字段只需在控制器中执行此操作
在您的控制器中存储前----> json_encode($metadata_variable);
当你想阅读或使用这个 ------> json_decode($metadata);
我用过这个,它工作正常
【讨论】:
我正在以Json
格式将数据存储在数据库中,并希望将数据类型保持为JSON
。你知道如何以那种格式存储数据吗?
在你的字段中存储数据之前,通过json_encode
将其转换为JSON
,当你想阅读它时json_decode
它,它会恢复到以前的状态。以上是关于SQLSTATE [42000]:语法错误或访问冲突:1064 在进行迁移时,您的 SQL 语法有错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误
SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL
Cakephp SQLSTATE [42000]:语法错误或访问冲突:1064
带有消息“SQLSTATE [42000]”的未捕获异常“PDOException”:语法错误或访问冲突: