使用Golang SQL驱动程序和UUID

时间:2016-07-02 13:56:19

标签: sql-server go guid uuid

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

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

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

它返回Id,前半部分翻转。我在这篇SO帖子(https://dba.stackexchange.com/questions/121869/sql-server-uniqueidentifier-guid-internal-representation)和其他一些文章/帖子中找到了解释。

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

1 个答案:

答案 0 :(得分:6)

将Id转换(或转换)为char将返回预期字节顺序中的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))