Php 将Laravel int转换为32位二进制(反之亦然)

Php 将Laravel int转换为32位二进制(反之亦然),php,mysql,laravel,binary,Php,Mysql,Laravel,Binary,试图创建包含32位二进制数的列 /** * Run the migrations. * * @return void */ public function up() { Schema::create('test_binary', function (Blueprint $table) { $table->increments('id'); $table->char('binary_number', 32)->charset('bi

试图创建包含32位二进制数的列

/**
 * 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();

    });
}

$table->char('binary_number', 32)->charset('binary');
当我通过HeidiSQL查看它时,我可以看到它是大小为32的
BINARY
类型

在创建播种机以填充所需数据时,我尝试了

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
   DB::table('test_binary')->insert([
    'id' => 1,
    'binary_number' => 2,
    'created_at' => now(),
    'updated_at' => now()
    ]);
事实证明,如果我在二进制数中使用2或101,我将得到DB中的结果分别为2或101

当我尝试
0000000000000000000000010
(在32位二进制中等于2)和
0000000000000000001100101
(在32位二进制中等于101)

然后我分别得到值8和294977


然而,我要寻找的是将2存储为
00000000000000000000000000000010
,将101存储为
0000000000000000001100101
,您看到的是在基数8中编码的数字,这是因为您在它前面加了一个0(后面跟着更多的0)这使得010基数8==8基数10

在PHP中,要指示数字是二进制的,请使用
0b10
,因此您的代码是:

'binary_number' => 0b00000000000000000000000000000010, // this is 2 in decimal
如果要将十进制数10存储在数据库中,只需使用:

'binary_number' => 10,
请注意,似乎转换为二进制是在数据库端进行的,因此如果不想传递二进制数,实际上不需要传递二进制数

如果要将数字强制转换为给定长度的二进制字符串,可以使用

$binaryString = str_pad(base_convert(2, 10, 2),32,'0',STR_PAD_LEFT);  // '00000000000000000000000000000010'

更多详细信息,请参见

如果我想将
2
存储为
00000000000000000000000000000000000010
,请检查更新,谢谢。欢迎你回答,我会翻译成西班牙语和葡萄牙语(如果你不知道怎么翻译的话)。我想你可以把这个答案复制到那里,如果你想的话可以链接到这里。顺便说一句,在HeidiSQL中,
BINARY
字符集的实际含义可能存在误解。它不是用于二进制数,而是用于二进制字符串,即没有任何字符编码的字符串。我认为这是您在这里需要的,尽管我不完全确定Laravel是否支持这一点,因此您可能需要使用
DB::raw(“b'0000000 10')
将数据插入位列
$binaryString = str_pad(base_convert(2, 10, 2),32,'0',STR_PAD_LEFT);  // '00000000000000000000000000000010'