Php 将Laravel int转换为32位二进制(反之亦然)
试图创建包含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
/**
* 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'