php - Laravel 5.5 迁移失败 : Update column datatype string to json

标签 php sql laravel

当我迁移数据库时,我在将表列从字符串更新为 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/

相关文章:

PHP - MVC 应用程序中工作单元应位于何处?

javascript - 传递 JSON 数据并将其取回

mysql - 如何查询一个字段与另一个字段相关的最大值?分组依据不起作用? (MySQL)

php - 直接从 Eloquent 查询中提取和格式化日期

Laravel 选择命令数字键

php - mySql 查询期间的 Foreach

php - 使用 Swagger/OpenAPI 规范指定要作为 GET 参数发送的数组

java - 如何使用 Java 将 Postgres 中的图像检索到 Matlab 中?

sql - LINQ to SQL - 选择文本之类的字符串数组

Laravel 护照 : How can I properly setup a feature test?