带有Golang SQL驱动程序和UUID的MS SQL uniqueidentifier

Ken*_*539 3 sql-server uuid guid go

我使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ark 7

将Id转换(或转换)为char将返回预期字节顺序中的Id:

"SELECT cast(Id as char(36)) FROM ..."
Run Code Online (Sandbox Code Playgroud)

注意转换为二进制文件会产生与直接查询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))
Run Code Online (Sandbox Code Playgroud)