【问题标题】:Laravel Schema Builder : Creating a binary(16) columnLaravel Schema Builder:创建二进制(16)列
【发布时间】:2018-08-29 13:31:36
【问题描述】:

使用 Laravel 5.5 和 Mysql (10.1.19-MariaDB)

对于 md5 哈希,我想要一个 binary(16) 列。 我们将列称为 url_hash

使用时:

$table->binary('url_hash');

它会给我一个 BLOB 列。

来源:https://laravel.com/docs/5.5/migrations#creating-columns

我已经在网上看到了各种各样的黑客或插件,但是没有任何外部插件可能会在下一次更新时中断的最简单的方法是什么?

干杯

【问题讨论】:

  • 你在使用 MySQL 吗?
  • 是的,会更新..感谢您的关注。
  • 你可以用 DB::statement('CREATE TABLE t (url_hash BINARY(16))');
  • @SariYono:这不会创建一个双表吗?又名错误?但是谢谢,我认为这让我走上了正轨。
  • 如果您愿意,可以在单独的调用中使用 alter table ;)

标签: mysql laravel laravel-5.5


【解决方案1】:

您可以将字符集设置为二进制

$table->char('url_hash', 16)->charset('binary');

这实际上在 MySQL Workbench 中显示为一个真正的 binary 列类型,长度为 16。

应该没有什么区别:https://stackoverflow.com/a/15335682/5412658

【讨论】:

    【解决方案2】:

    扩展MySqlGrammar 类,例如在app/MySqlGrammar.php:

    namespace App;
    
    use Illuminate\Support\Fluent;
    
    class MySqlGrammar extends \Illuminate\Database\Schema\Grammars\MySqlGrammar {
    
        protected function typeRealBinary(Fluent $column) {
            return "binary({$column->length})";
        }
    
    }
    

    然后使用宏添加自己的列类型:

    DB::connection()->setSchemaGrammar(new \App\MySqlGrammar());
    
    Blueprint::macro('realBinary', function($column, $length) {
        return $this->addColumn('realBinary', $column, compact('length'));
    });
    
    Schema::create('table', function(Blueprint $table) {
        $table->realBinary('url_hash', 16);
    });
    

    【讨论】:

    • 今天你还会这么说吗?
    【解决方案3】:

    Laravel 作者 recommends 进行 DB:statement 调用并运行原始 SQL。

    如果您正在运行迁移,您可以在 Schema::create 之后运行此原始 SQL:

    DB::statement('ALTER TABLE table_name ADD url_hash binary(16) AFTER some_column');
    

    取决于用例,您可能需要在删除表之前运行此原始 SQL 以删除列:

    DB::statement('ALTER TABLE table_name DROP url_hash');
    

    【讨论】:

      猜你喜欢
      • 2014-04-11
      • 2017-01-16
      • 2015-03-13
      • 1970-01-01
      • 2012-01-01
      • 2013-10-19
      • 2013-02-11
      • 1970-01-01
      • 2011-03-17
      相关资源
      最近更新 更多