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类型到自己,因为他们都知道放缓查询。
长文本仍然没有足够长的时间来存储的base64图像,它只是一个图像缓存持续性存储,后台作业火灾地暖缓存,这样的速度是不是一个问题,我觉得要做到这一点是删除列,并使用原始的SQL语句来创建LONGBLOB类型的唯一途径 –