【发布时间】:2021-06-23 06:10:14
【问题描述】:
目前我正在使用
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('test_binary', function (Blueprint $table) {
$table->increments('id');
$table->char('binary_number', 32)->charset('binary'); // From: https://stackoverflow.com/a/62615777/5675325
$table->timestamps();
});
}
存储 32 位二进制数,例如 00000000000000000000000000000010,即 result of
$binaryString = str_pad(base_convert(2, 10, 2),32,'0',STR_PAD_LEFT);
并存储在这样的表中
播种机有类似的东西
'binary_number' => str_pad(base_convert(2, 10, 2),32,'0',STR_PAD_LEFT),
关于在 DB 中使用 BINARY 类型(如上图所示),建议使用 apokryfos
我认为 bit 是你在这里需要的,虽然我不完全确定 Laravel 是否支持,所以你可能需要使用
DB::raw("b'000000010'")将数据插入位列
Jarek Tkaczyk 同意 (I'm not fully sure that Laravel supports that) 部分
具有位类型字段意味着您在插入/更新该字段时需要使用原始值作为解决方法。 (...)
DB::table('table')->insert(['bit_field' => DB::raw(0)]); // inserts 0
如果可以的话,他建议 OP 更改为 tinyint(对于可以具有值 0 或 1 的列的情况)。
这可能暗示如果想通过 Laravel 迁移处理大小为 32 的位,则需要使用比 tinyint 更大的整数。
所以,如果我想要一个大小为 32 的 int,Alexey Mezenin 指出
你不能这样做,但你可以使用不同类型的整数:
$table->bigInteger() $table->mediumInteger() $table->integer() $table->smallInteger() $table->tinyInteger()
会发生什么
$table->char('binary_number', 32)->charset('binary');
那么将 32 位二进制数作为值,如何插入/检索这样的记录?
【问题讨论】:
-
冗余存储容易计算的东西是不“合适的”。仅存储
id并在需要它的位版本时使用公式。或者解释冗余的理由。
标签: mysql laravel binary bit laravel-migrations