MS SQL 具有 Golang SQL 驱动程序和 UUID 的唯一标识符

MS SQL uniqueidentifier with Golang SQL driver and UUID

我正在使用 Go 1.6.2 连接到 SQL-Server 数据库。我正在使用带有 sql 包的 go-mssqldb 驱动程序 (github.com/denisenkom/go-mssqldb)。

我的问题是我正在使用 github.com/twinj/uuid 包创建 uuid(我也尝试了其他一些)并且它们正确插入但是当我尝试将它们扫描出来时

err := Database.QueryRow("SELECT Id FROM ...").Scan(&struct.Id)

它 returns 上半部分翻转的 Id。我在这个 SO post (https://dba.stackexchange.com/questions/121869/sql-server-uniqueidentifier-guid-internal-representation) 和其他一些 articles/posts.

中找到了解释

但是,我一直无法找到任何具体的方法来解决这个问题。我无法改变 SQL-server 存储 guid 的方式。我是否遗漏了 UUID 扫描实现的某些内容?我还没有看到改变它阅读方式的方法。我的最后一个选择是编写我自己的实现来交换位,但想联系我看看我是否遗漏了驱动程序或 UUID 包或其他一些库。

将 Id 转换(或转换)为字符 returns Id 按预期的字节顺序排列:

"SELECT cast(Id as char(36)) FROM ..."

请注意转换为二进制给出的结果与直接查询 Id 的结果相同。

0F F1 4D 44 F4 72 49 59 9F C8 18 C2 DB 26 3C 3C  As inserted

44 4D F1 0F 72 F4 59 49 9F C8 18 C2 DB 26 3C 3C  Id (no cast)
44 4D F1 0F 72 F4 59 49 9F C8 18 C2 DB 26 3C 3C  cast(Id as binary(16))
0F F1 4D 44 F4 72 49 59 9F C8 18 C2 DB 26 3C 3C  cast(Id as char(36))