关于GUID的一个奇怪的有关问题
关于GUID的一个奇怪的问题
问题是这样的,我在数据库A里面有一个表,这个表里面的某一个字段是存的订单号,并且是加密过的(自定义加密,也可以解密),现在有一个问题是这个字段里面存储了加密后的32位GUID(自动生成的36位GUID,截取前32位)后,通过另外一个取数据的程序把这条记录取出来,然后写入到另外一个数据库B的表中,这个字段的值就自动把32位补足成36位了,而且这个取数据的程序没有经过任何的逻辑处理,不知道哪位大神能够解释下?
------解决思路----------------------
先给你科普一下,GUID是128位的,也就是说有16个字节,如果转换成文本,每个字节要2个字符来表示,所以共有32个字符,加上4个分组的连接符,共36个字符,因此你说的32位或36位实际是字符的意思。
由于你说是截取了GUID的前32个字符,说明A表这个字段肯定不是uniqueidentifier类型,很有可能是varchar,因为如果只截取前32个字符的话,是一个不合法的Guid,这也在程序里也不可能通过读取Guid的方式放到B表中,因此推断出B表的这个字段应该也是字符串类型的,这样的话,问题的原因就清楚了,因为你在B表中使用了char(36)。你只要把B表中的这个字段改成char(32)就可以了。
------解决思路----------------------
同1楼,这个问题跟GUID不GUID的,一点关系都没有
自始至终,你都是在玩字符串而已
问题是这样的,我在数据库A里面有一个表,这个表里面的某一个字段是存的订单号,并且是加密过的(自定义加密,也可以解密),现在有一个问题是这个字段里面存储了加密后的32位GUID(自动生成的36位GUID,截取前32位)后,通过另外一个取数据的程序把这条记录取出来,然后写入到另外一个数据库B的表中,这个字段的值就自动把32位补足成36位了,而且这个取数据的程序没有经过任何的逻辑处理,不知道哪位大神能够解释下?
------解决思路----------------------
先给你科普一下,GUID是128位的,也就是说有16个字节,如果转换成文本,每个字节要2个字符来表示,所以共有32个字符,加上4个分组的连接符,共36个字符,因此你说的32位或36位实际是字符的意思。
由于你说是截取了GUID的前32个字符,说明A表这个字段肯定不是uniqueidentifier类型,很有可能是varchar,因为如果只截取前32个字符的话,是一个不合法的Guid,这也在程序里也不可能通过读取Guid的方式放到B表中,因此推断出B表的这个字段应该也是字符串类型的,这样的话,问题的原因就清楚了,因为你在B表中使用了char(36)。你只要把B表中的这个字段改成char(32)就可以了。
------解决思路----------------------
同1楼,这个问题跟GUID不GUID的,一点关系都没有
自始至终,你都是在玩字符串而已