PHP肿么读取SQL的varbinary类型

已举报 回答
PHP肿么读取SQL的varbinary类型
问在线客服
扫码问在线客服
  • 回答数

    3

  • 浏览数

    9,305

3个回答 默认排序
  • 默认排序
  • 按时间排序

已采纳
在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容。

解析的时候,往往是一个字节(Byte)占用8个位(bit),高位4bit 表示一个十六进制数据,低位4bit 表示一个十六进制数据。

问题描述:在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换?

一定会有人立马反问我:为什么不在程序中使用 C# 或者 JAVA 或者 C++ 来处理这个业务呢?

我的回答是:这个我知道,也已经实现了。但在一些特殊的应用环境和业务需求面前(如:对数据的统计、对数据的分析),我必须这么做!

SQL Server 数据库中,实现 varbinary 类型转换成 varchar 类型

这个已经有人实现了,并且处理得相当巧妙。实现的思路是:

每次取得 varbinary 中一个字节的数据,然后除以16 获得高位的4bit数据,再模16获得低位的4bit数据;

分别从固定字符串中以下标的形式匹配对应的字符,最后累加起来即可。

代码如下:

复制代码
--==============================================
-- FUNCTION varbin2hexstr
-- 将 varbinary 类型的数据转换为 varchar 类型
--==============================================

IF OBJECT_ID ('dbo.varbin2hexstr') IS NOT NULL
DROP FUNCTION dbo.varbin2hexstr
GO

CREATE function varbin2hexstr(
@bin varbinary(8000)
)returns varchar(8000)
as
begin
declare @re varchar(8000),@i int
select @re='',@i=datalength(@bin)
while @i0
select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
+substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
+@re
,@i=@i-1
-- return('0x'+@re)
return @re
end

GO
复制代码
测试示例:

select dbo.varbin2hexstr(0x1432fabcdef1234567890)
来源:SqlServer中varbinary转换成字符串
取消 评论
我也正想弄,大概思路是:
1、php安装mssql扩展;
2、用php连接sql server服务器
取消 评论
上面说的对
取消 评论
ZOL问答 > 相机 > 其他 > PHP肿么读取SQL的varbinary类型

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

扫码参与新品0元试用
晒单、顶楼豪礼等你拿

扫一扫,关注我们
提示

确定要取消此次报名,退出该活动?