You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SQL Server的VARBINARY列反序列化R对象?RODBC数据转换问题

问题描述

使用serialize()将R对象存入SQL Server的VARBINARY列后,尝试用unserialize()取出时遇到报错。获取数据的代码如下:

library(RODBC)
dbhandle <- odbcDriverConnect("MyConnection String")
x = sqlQuery(dbhandle, sprintf('select SomevarbinaryColumn from MyTAble WHERE the_key = 8675309'))

执行unserialize(x$SomevarbinaryColumn[1])时出现错误:

Error in unserialize(x$SomevarbinaryColumn[1]) :
   'connection' must be a connection

经print(typeof(x$SomevarbinaryColumn[1]))查询,该数据类型为list,RODBC文档明确VARBINARY类型会以raw向量的列表形式返回,需要提取出unserialize()可接受的raw向量。

解决方法

RODBC返回的VARBINARY列是由raw向量组成的列表,使用双层方括号[[ ]]直接提取列表中的元素即可得到所需的raw向量:

# 提取目标raw向量
target_raw <- x$SomevarbinaryColumn[[1]]
# 执行反序列化操作
restored_obj <- unserialize(target_raw)

也可以合并为一行代码:

restored_obj <- unserialize(x$SomevarbinaryColumn[[1]])

区别在于:x$SomevarbinaryColumn[1]返回的是包含单个元素的子列表(类型仍为list),不符合unserialize()的参数要求;而[[1]]会直接取出列表中的第一个raw向量元素,满足函数对raw向量参数的需求。

内容的提问来源于stack exchange,提问作者MikeB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:33:14