使用Laravel 5.5和Mysql(10.1.19-MariaDB)
对于md5哈希,我想要一个二进制(16)列。 我们称之为colum url_hash
使用时:
MySuperClass
它会给我一个BLOB专栏。
来源:https://laravel.com/docs/5.5/migrations#creating-columns
我已经在网上看过各种各样的黑客或插件,但是最简单的一个没有任何外部插件可能会在下一次更新时中断?
干杯
答案 0 :(得分:3)
扩展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);
});
答案 1 :(得分:2)
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');
答案 2 :(得分:1)
您只需将字符集设置为 binary 。
$table->char('url_hash', 16)->charset('binary');
在MySQL Workbench中,这实际上显示为真正的 binary 列类型,长度为16。