GVKun编程网logo

MySQL中的二进制数据(mysql的二进制数据类型有什么用?)

14

在本文中,我们将带你了解MySQL中的二进制数据在这篇文章中,我们将为您详细介绍MySQL中的二进制数据的方方面面,并解答mysql的二进制数据类型有什么用?常见的疑惑,同时我们还将给您一些技巧,以帮

在本文中,我们将带你了解MySQL中的二进制数据在这篇文章中,我们将为您详细介绍MySQL中的二进制数据的方方面面,并解答mysql的二进制数据类型有什么用?常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的CPU中的二进制数据(小数篇)、CPU中的二进制数据(整数篇)、c#/ asp.net显示数据库中的二进制数据、java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?

本文目录一览:

MySQL中的二进制数据(mysql的二进制数据类型有什么用?)

MySQL中的二进制数据(mysql的二进制数据类型有什么用?)

如何在MySQL中存储二进制数据?

答案1

小编典典

phpguy 的回答是正确的,但我认为那里的附加细节有很多混淆。

基本答案在BLOB数据类型/属性域中。 BLOB 是 Binary Large Object 的缩写,该列数据类型专门用于处理二进制数据。

请参阅MySQL 的相关手册页。

CPU中的二进制数据(小数篇)

CPU中的二进制数据(小数篇)

1.用二进制数表示小数

主要是小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0

2.什么是浮点数

浮点数是指用符号,尾数,基数和指数这四部分来表示的小数。因为计算机内部使用的是二进制数,所以基数自然是2。因此,实际的数据中往往不考虑基数,只用符号,尾数,指数这三部分即可表示浮点数。

也就是说,64位(双精度浮点数)和32位(单精度浮点数)的数据,会被分为三部分来使用。

符号部分:是指使用一个数据位来表示数值的符号。和用二进制数来表示整数时的符号位时相同的

尾数部分:用的是“将小数点前面的值固定为1的正则表达式”(按照特定的规则来表达数据的形式即为正则表达式)

指数部分:用的则是“EXCESS系统表现”

3.正则表达式和EXCESS系统

尾数部分:

正则表达式:在二进制中,我们使用的是“将小数点前面的值固定为1的正则表达式”。具体来讲,就是将二进制数表示的小数左移或右移(这里是逻辑位移)数次后,整数部分的第1位变为1,第2位之后都变成0(这样是为了消除第2位以上的数位)。而且,第1位的1实际的数据中不保存。由于第1位必须是1,因此,省略该部分后就节省了一个数据位,从而也就可以表示更多的数据范围(虽不算太多)

单精度浮点数的正则表达式的具体例子如下:

1011.0011 原始数值 0001.0110011 右移使整数部分的第1位变成1

0001.01100110000000000000000

确保小数点以后的长度为23 01100110000000000000000 仅保留小数点后面的部分

指数部分:

EXCESS系统表现:通过将指数部分表示范围的中间值设为0,使得负数不需要用符号来表示,当指数部分是8位单精度浮点数时,最大值11111111 = 255的1/2,即011111111 = 127(小数部分舍弃)表示的是0,指数部分是11位双精度浮点数时,1111111111 = 2047的1/2,即011111111111 = 1023(小数部分舍弃)表示的是0。

单精度浮点数指数部分的EXCESS系统表现

实际的值(二进制数) 实际的值(十进制数) EXCESS系统表现(十进制数) 11111111 255 128 =(255-127) 11111110 254 127 =(254-127) …… …… …… 01111111 127 0 =(127-127) 01111110 126 -1 =(126-127) …… …… …… 00000001 1 -126 =(1-127) 00000000 0 -127 =(0-127)

在实际的程序中进行确认:

 1 #include <stdio.h>
 2 
 3 void main(void){
 4     float data;
 5     unsigned long buff;
 6     int i;
 7     char s[34];
 8 
 9     //将0.75以单精度浮点数的形式存储在变量data中
10     data = (float)0.75;
11 
12     //把数据复制到4字节长度的整数变量buff中以逐个提取出每一位。
13     memcpy(&buff,&data,4);
14 
15     printf("%ld\n",buff);
16 
17 
18     //逐个提取出每一位
19     for (i = 33; i >= 0; i--){
20         if(i == 1|| i == 10){
21             //加入破折号来区分符号部分,指数部分和尾数部分。
22             s[i] = ''-'';
23         }else{
24             //为各个字节赋值‘0’或者‘1’
25             if(buff % 2 == 1){
26                 s[i] = ''1'';
27             }else{
28                 s[i] = ''0'';
29             }
30             buff /= 2;
31         }
32     }
33     s[34] = ''\0'';
34 
35     //显示结果
36     printf("%s\n",s);
37 
38     getchar();
39 
40 }

输出结果:

1061158912
0-01111110-10000000000000000000000

该程序执行后,十进制数0.75用单精度浮点数来表示就变成了0-01111110-1000000000000000000000表示的就是(+1.5*2的-1次幂)。

 

CPU中的二进制数据(整数篇)

CPU中的二进制数据(整数篇)

1.用二进制数表示计算机信息的原因

计算机内部CPU和内存都是IC的一种,它们都有多个引脚。IC的所有引脚,只有直流电压0V或5V两个状态。也就是说,IC的一个引脚,只能表示两个状态。IC的这个特性,决定了计算机的信息数据只能用二进制数来处理。计算机处理信息的最小单位——位,就相当于二进制中的一位。

对于用二进制数表示的信息,计算机不会区分它是数值,文字,还是某种图片的模式等,而是根据编写程序的各位对计算机发出的指示来进行信息的处理。

2.什么是二进制数(略)

3.移位运算和乘除运算的关系

移位运算指的是将二进制数值的各数位进行左右移位的运算。移位有左移和右移两种。

移位操作使最高位或最低位溢出的数字直接丢弃就可以了。

4.便于计算机处理的“补数”

4.1表示负数的方法:

计算机在做减法运算时,实际上内部是在做加法运算。用加法运算来实现减法运算。为此,在表示负数时就使用“二进制的“补数”。补数就是用正数来表示负数。

为了获得补数,我们需要将二进制数的各数位的数值全部取反,然后再将结果加1。原理是:“将二进制数的值取反后加1的结果,和原来的值相加,结果为0”

需要注意的一点:当运算结果为负数时,计算结果的值也是以补数的形式表示的。例如3-5这个运算,用8位二进制数表示3时是00000011,而5=00000101的补数取反加1,也就是11111011。因此3-5其实就是00000011+11111011的运算,运算结果为11111110,最高位变成了1。这就表示结果是一个负数。那么通过求解补数的补数,就可知该值的绝对值。因此11111110的补数,取反加1后为00000010。这个是2的十进制数。因此,11111110表示的就是-2。我们就得到了3-5的正确结果。

5.逻辑右移和算术右移的区别

算术右移:将二进制作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(0或1).这就是算术右移。

只有在右移时才必须区分逻辑位移和算术位移。左移时,无论时图形模式(逻辑左移)还是相乘运算(逻辑右移),都只需要在空出来的低位补0即可。

下面顺便介绍以下符号扩充。以8位二进制数为例,符号扩充就是指在保持值不变的前提下将其转换成16位和32位的二进制数。将01111111这个正的8位二进制数转换成16位二进制数时,很容易就能得出0000000001111111这个正确结果,但是像11111111这样用补数来表示的数值,该如何处理比较好呢?实际上将其表示成1111111111111111就可以了。也就是说,不管时正数还是用补数表示的负数,都只需用符号位的值(0或1)填充高位即可。这就是符号扩充方法。

6.逻辑运算

逻辑运算是指对二进制数各数字位的0和1分别进行处理的运算,包括逻辑非(NOT运算),逻辑与(AND运算),逻辑或(OR运算)和逻辑异或(XOR运算)四种。

对于逻辑运算,我们需要一个整体的把握:

逻辑非:是所有位的取反操作

逻辑与:是将一部分变为0(复位到0)的操作

逻辑或:是将一部分变为1(复位到1)的操作

逻辑异或:是将一部分进行取反(相同取0,不同取1)的操作

c#/ asp.net显示数据库中的二进制数据

c#/ asp.net显示数据库中的二进制数据

我一直在寻找如何从数据库中检索二进制数据。我的查询工作正常,因为它在SQL管理器中显示了二进制数据。

但是在Visual Studio 2010中,它只是向我显示<Binary Data>,我个人认为这不是问题,但是如果我尝试检索它并将其存储在变量中,则它只是空的。只要与二进制数据无关,任何其他查询都可以工作…

而且我不想使用数据网格或其他任何东西,因为我只需要将其用作变量。

SqlCommand CMDbinary = new SqlCommand("SELECT Binary_field AS binary "
                                      + "FROM BIN_table",abc_conn);

SqlDataReader Bin_retriever = CMDbinary.ExecuteReader();
while (Bin_retriever.Read())
{
    BIN.Add(Bin_retriever["binary"].ToString());
}
abc_conn.Close();

我知道这不是完整的代码,但这是出问题的地方,我假设我必须做一些特殊的事情才能显示二进制信息,因为(我再说一遍)如果更改Binary_fieldUID(即一个varchar在数据库中)。

在此方面的任何帮助都将受到欢迎,在此先谢谢您!

java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?

java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?

转换入参字符串waitforsignstring 为二进制数组,编码采用utf-8(java代码如:waitforsignstring.getbyte("utf-8")),得到签名入参的二进制格式数据(waitforsignbytes)。

使用MD5,Sha1或Sha256算法对waitForSignBytes进行摘要签名。得到签名在结果二进制数组数据(signatureBytes)

对签名输出的结果二进制数组(signatureBytes)进行16进制的字符串编码,得到最后的签名字符串(signature)

算法表达式:

String signature = Hex(digest (stringToSign+secretKey)) 其中digest算法可以为:MD5, Sha256Hex

立即学习“PHP免费学习笔记(深入)”;

请问这段签名算法用php应该怎么实现? php的md5似乎没有办法操作数组。。。。

回复内容:

转换入参字符串waitforsignstring 为二进制数组,编码采用utf-8(java代码如:waitforsignstring.getbyte("utf-8")),得到签名入参的二进制格式数据(waitforsignbytes)。

使用MD5,Sha1或Sha256算法对waitForSignBytes进行摘要签名。得到签名在结果二进制数组数据(signatureBytes)

对签名输出的结果二进制数组(signatureBytes)进行16进制的字符串编码,得到最后的签名字符串(signature)

算法表达式:

String signature = Hex(digest (stringToSign+secretKey)) 其中digest算法可以为:MD5, Sha256Hex

立即学习“PHP免费学习笔记(深入)”;

请问这段签名算法用php应该怎么实现? php的md5似乎没有办法操作数组。。。。

  1. 在PHP中,字符串是兼容二进制的,并且默认就带有编码形式,如果你的字符串本身是UTF-8编码的,那它就已经是UTF-8的二进制数组了。

  2. PHP中的md5函数可以直接计算字符串(也就是二进制数组)的MD5值,并且默认输出的就是已经转换成16进制的结果。

所以,在Java中捺莫多操作所所要实现的……
在PHP中就是 $md5 = md5(''字符串'');

今天关于MySQL中的二进制数据mysql的二进制数据类型有什么用?的介绍到此结束,谢谢您的阅读,有关CPU中的二进制数据(小数篇)、CPU中的二进制数据(整数篇)、c#/ asp.net显示数据库中的二进制数据、java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?等更多相关知识的信息可以在本站进行查询。

本文标签: