3

我已经在 varchar 中导入了一个包含空间区域信息的 csv 文件,然后通过在转换之前将 '0x' 添加到 varchar(max) 值来将 varchar(max) 值转换为 varbinary(max)。到那时,除了开头的 '0x' 之外,varbinary(max) 列中的数据看起来与 varchar(max) 转换为文本后的数据完全相同。

现在我运行以下脚本:

select geometry::STGeomCollFromWKB(wkb, 4326) from dbo.MyTable

其中 WKB 是 varbinary(max) 列。运行上述脚本会引发此错误:“众所周知的二进制 (WKB) 输入无效

数据来源来自 Open Street Map,因此毫无疑问它们是正确的区域数据。所以我认为我正在做的事情一定有问题,或者我错过了将 WKB 转换为几何数据类型的一些要点。

有人可以帮忙吗?

4

1 回答 1

1

我认为问题是在将 varchar 数据转换为 varbinary 时,您正在转换二进制数据的实际字符表示,而不仅仅是将类型更改为二进制。

例如,如果您的 varchar 列中有数据 0xDEADBEEF,那么执行 convert(varbinary(max), 'DEADBEEF') 会将 ascii 字符表示形式转换为二进制。

您想要做的是将十六进制字符串转换为二进制,这可以使用 convert 的样式参数。

选择转换(varbinary(最大),'DEADBEEF',2)

应该做你想做的事情,将你的 varchar wkb 数据转换成真正的二进制文件。

于 2011-07-12T18:59:39.217 回答