当我迁移数据库时,我在将表列从字符串更新为 JSON 时遇到错误。
列值如下:
{"images":["/vendors/57/horse-16.png"]}
我检查了这是否是有效的 JSON,并且对我来说看起来不错..
我的迁移文件是:
public function up()
{
Schema::table('vendor_horses', function (Blueprint $table) {
$table->json('image')->change();
});
}
我在 Laravel 中的错误:
SQLSTATE[42000]: Syntax error or access violation: 1253 COLLATION 'utf8mb4_
unicode_ci' is not valid for CHARACTER SET 'binary' (SQL: ALTER TABLE vendo
r_horses CHANGE image image JSON DEFAULT NULL COLLATE utf8mb4_unicode_ci)
我不知道出了什么问题,字符串是正确的,为什么更新失败?
最佳答案
我在Github上挖掘了一些与该错误相关的问题,发现当更改为JSON字段时,排序规则应设置为空字符串,这个问题将得到解决。因此您可以尝试更改以下代码:
$table->json('image')->change();
至
$table->json('image')->customSchemaOptions(['collation' => ''])->change();
有关更多详细信息,您可以查看此 issue
关于php - Laravel 5.5 迁移失败 : Update column datatype string to json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138428/