You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5+MariaDB:创建binary(16)列的无插件最简方案咨询

解决Laravel 5.5创建binary(16)列的问题

你遇到的这个情况特别常见——Laravel 5.5的Schema Builder里binary()方法默认生成的是BLOB类型,但我们需要的是固定长度的binary(16)来存储MD5哈希(毕竟MD5转成二进制后刚好是16字节)。这里给你一个完全原生、无需外部插件、也不用担心后续Laravel更新失效的最简实现方式:

直接在迁移文件里使用原生SQL语句来创建这个列,具体代码如下:

public function up()
{
    Schema::create('your_table_name', function (Blueprint $table) {
        // 先定义其他常规列
        $table->increments('id');
        // ... 这里放你需要的其他列,比如url字段等

        // 用原生SQL精准创建binary(16)类型的url_hash列
        DB::statement('ALTER TABLE your_table_name ADD COLUMN url_hash BINARY(16) AFTER id');
    });

    // 如果是给已存在的表添加列,直接用下面的语句即可
    // DB::statement('ALTER TABLE your_table_name ADD COLUMN url_hash BINARY(16)');
}

public function down()
{
    Schema::table('your_table_name', function (Blueprint $table) {
        $table->dropColumn('url_hash');
    });
}

为什么这个方法靠谱?

  • 完全依赖Laravel自带的DB::statement()方法,没有任何第三方依赖,不会因为插件停更或Laravel版本迭代失效;
  • 直接使用MySQL/MariaDB原生语法,精准控制列类型为binary(16),完美匹配MD5哈希的存储需求;
  • 不管是新建表还是给已有表追加列都适用,灵活度拉满。

另外补充个小细节:存入数据时记得把MD5哈希转换成二进制格式,用PHP的hex2bin()函数就行:

$model->url_hash = hex2bin(md5($yourUrl));
$model->save();

查询的时候如果需要对比,也可以用bin2hex()把二进制转回十六进制字符串:

$targetHash = hex2bin(md5($targetUrl));
$record = YourModel::where('url_hash', $targetHash)->first();

内容的提问来源于stack exchange,提问作者Paolo_Mulder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:06:34