在 SQL Server 2008 中转换为空间类型的知名文本 (WKT) 时,我在机器之间遇到了不一致的行为。看起来数据的存储方式相同,但转换回 WKT 的行为因机器而异!
这是我整理的一些内容以查明问题:
SET NOCOUNT ON;
DECLARE @TestTable TABLE (TestPoint GEOGRAPHY);
INSERT INTO @TestTable(TestPoint) VALUES (geography::STGeomFromText('POINT(-124.957140999999993 39.326679)',4326));
DECLARE @PointAsText NVARCHAR(max);
SELECT @PointAsText = TestPoint.STAsText() from @TestTable;
PRINT @PointAsText;
DECLARE @PointAsBinary BINARY(22);
SELECT @PointAsBinary = CAST(TestPoint AS BINARY(22)) from @TestTable;
print @PointAsBinary;
print @@version;
在我可用的各种机器上,我看到两个不同的结果:
点(-124.95714099999999 39.326679)
0xe610000000010C1EA5129ED0A94340492A53CC413D5FC0
Microsoft SQL Server 2008 R2(SP1) - 10.50.2500.0 (X64)
6月17日2011 00:54:03 Windows NT 6.1上的
Microsoft Corporation
Developer Edition(64位)(Build 7601 : 服务包 1)
或者
POINT ( -124.957141 39.326679)
0xE6100000010C1EA5129ED0A94340492A53CC413D5FC0
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86)
Apr 2 2010 15:52:06 Windows Service Pack2
版权所有 (c) Microsoft NT6 Corporation
Build Developer Edition。0 )(管理程序)
另一个测试用例显示具有 2008 R2 (RTM) 的 X64 机器给出-124.95714099999999。因此,绝对表明 x86 与 x64。
我至少对缺乏浮点精度有点熟悉,但我不知道它是特定于架构的。似乎使用 SQL 空间存储涉及通过像这样的 WKT 转换的数据。我是否没有看到更合适的策略来处理这些数据?