我的项目中要求将图像存储在数据库中,当前列类型为TEXT,因此在尝试存储图像时,sql会抛出有关字符串太长的错误。所以我创建了一个迁移
Schema::table('pages', function (Blueprint $table) {
$table->binary('extras')->change();
});
当我运行迁移时,它会抛出错误
SQLSTATE [42000]:语法错误或访问冲突:1253 COLLATION 'utf8mb4_unicode_ci'对CHARACTER SET'二进制'无效(SQL: ALTER TABLE页面CHANGE extras extras B LOB DEFAULT NULL COLLATE utf8mb4_unicode_ci)
我使用config.database中的默认排序规则和字符集
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
这些不支持blob格式吗?如果没有正确的设置,我不需要unicode或表情符号支持。
我正在使用mysql v5.7
答案 0 :(得分:1)
唯一要做的就是删除列并使用原始的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");
});
答案 1 :(得分:0)
尝试使用LONGTEXT类型:
$table->longText('extras');
我唯一的建议是将blob类型从你的表中解耦为他们自己的,因为他们知道减慢查询速度。