从varbinarymax读取STGeomCollFromWKB时出现问题

问题描述

|| 我已经导入了一个在varchar中包含空间区域信息的csv文件,然后通过在转换之前在varchar(max)值中添加\'0x \'将varchar(max)值转换为varbinary(max)。到那时,除了开头的\'0x \'之外,varbinary(max)列中的数据看起来与转换为文本的varchar(max)完全相同。 现在,我运行以下脚本:
select geometry::STGeomCollFromWKB(wkb,4326) from dbo.MyTable
其中WKB是varbinary(max)列。 运行上面的脚本将引发以下错误:\'众所周知的二进制(WKB)输入无效\' 数据源来自开放街道地图,因此毫无疑问它们是正确的区域数据。因此,我想我做的事情一定有问题,或者我缺少将WKB转换为几何数据类型的要点。 有人可以帮忙吗?     

解决方法

        我认为问题在于将varchar数据转换为varbinary时,您是在转换二进制数据的实际字符表示,而不仅仅是将类型更改为二进制。 例如,如果您的varchar列中有数据0xDEADBEEF,则执行 convert(varbinary(max),\'DEADBEEF \')将ASCII字符表示形式转换为二进制形式。 您要做的是将十六进制字符串转换为二进制,这可以使用convert的style参数来实现。 SELECT convert(varbinary(max),\'DEADBEEF \',2) 应该执行您想要将varchar wkb数据转换为真实二进制文件的操作。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...