SQL中float转varbinary后无法正确转回float的问题排查
问题分析与解决方法
错误原因
你操作里的核心问题是第二步把varbinary类型直接转换成了varchar——varbinary存储的是float的二进制底层编码,不是字符的二进制表示,直接转varchar会按照当前字符集去解析这些二进制字节,自然得到乱码,而不是原float数值的字符串形式。
正确转回float的方法
要从varbinary还原出原float值,直接把varbinary类型转换回float即可,不需要经过varchar中转:
-- 先将字符串转float再转varbinary DECLARE @binaryVal varbinary(max) = convert(varbinary(max), convert(float, '11000000000000')); -- 直接将varbinary转回float SELECT convert(float, @binaryVal);
执行后会得到原数值11000000000000(注意float是近似数值类型,可能会有极细微的精度差异,但显示上会匹配)。
原理补充
在SQL中:
float转varbinary时,是将float的IEEE 754双精度二进制编码直接存储为varbinary字节流。- 反向转换时,只要保持从
varbinary到float的直接转换,数据库就能正确解析这个二进制编码,还原出原float数值。 - 如果转成varchar,数据库会把这些二进制字节当成字符的编码来解码,完全偏离了原float的存储逻辑,所以得到无意义的乱码。
内容的提问来源于stack exchange,提问作者elle0087
相关产品推荐
相关产品推荐

