laravel 5.4数据库字符集和校对二进制类型

laravel 5.4数据库字符集和校对二进制类型

问题描述:

我在我的项目存储在数据库中的图像的要求,当前列类型是文本,所以当试图存储图像SQL抛出约串太长的错误。所以,我创建了一个迁移laravel 5.4数据库字符集和校对二进制类型

Schema::table('pages', function (Blueprint $table) { 
     $table->binary('extras')->change(); 
    }); 

当我运行它抛出一个错误

SQLSTATE [42000]迁移:语法错误或访问冲突:1253整理 “utf8mb4_unicode_ci”是无效字符集'二进制'(SQL: ALTER TABLE页CHANGE额外群众演员乙LOB DEFAULT NULL COLLATE utf8mb4_unicode_ci)使用默认排序规则和茶

IM RSET在config.database

 'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 

你对这些不支持BLOB格式?如果没有什么是这个正确的设置,我有没有必要对Unicode或表情符号支援。

我用mysql V5.7

onlyway做的是删除列,并使用原始的SQL查询像

Schema::table('portfolio', function (Blueprint $table) { 
      $table->dropColumn('image'); 
     }); 

     Schema::table('portfolio', function (Blueprint $table) { 
      $table->charset = 'utf8_bin'; 
      DB::statement("ALTER TABLE `portfolio` ADD `square_image` LONGBLOB"); 
      DB::statement("ALTER TABLE `portfolio` ADD `portfolio_image` LONGBLOB"); 
     }); 

尝试使用LONGTEXT类型:

$table->longText('extras'); 

我唯一的建议woule是从表中分离blob类型到自己,因为他们都知道放缓查询。

+0

长文本仍然没有足够长的时间来存储的base64图像,它只是一个图像缓存持续性存储,后台作业火灾地暖缓存,这样的速度是不是一个问题,我觉得要做到这一点是删除列,并使用原始的SQL语句来创建LONGBLOB类型的唯一途径 –