laravel 5.4数据库charset&二进制类型的排序规则

时间:2017-06-29 18:32:07

标签: php mysql database laravel-5 laravel-5.4

我的项目中要求将图像存储在数据库中,当前列类型为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

2 个答案:

答案 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类型从你的表中解耦为他们自己的,因为他们知道减慢查询速度。