zoukankan      html  css  js  c++  java
  • Guid排序问题

    网上参考,论坛之类,下面是粘贴的原话。

    在数据库中执行SQL并对GUID列升序排序,结果为:
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
    E23CADA8-542C-4D83-865D-FA279BDA904F
    而在C#中,用DataTable.DefaultView.Sort排序时得到的结果如下: 
    E23CADA8-542C-4D83-865D-FA279BDA904F
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
    二种排序结果正好相反,不解其意,望高手回答。
    注:DataTable中的列类型为GUID,和数据库列数据类型相同!

    declare @guid1 uniqueidentifier
    declare @guid2 uniqueidentifier
    
    set @guid1 = 'FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3'
    set @guid2 = 'E23CADA8-542C-4D83-865D-FA279BDA904F'
    
    
    select @guid1 id union
    select @guid2 
    order by id
    
    结果:
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
    E23CADA8-542C-4D83-865D-FA279BDA904F
    
    -------------------------------------------------
    select @guid1 id union
    select @guid2 
    order by id desc
    
    结果:
    E23CADA8-542C-4D83-865D-FA279BDA904F
    FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
    

      在数据库中,我们用的guid是16字节,它的存储方式是二进制。
    我们看到的只是它的字符串格式,例如
    字符串格式: '6F9619FF-8B86-D011-B42D-00C04FC964FF'
    ---------------------------------------------------
    而实际上它的存储格式为二进制,例如:
    二进制格式: 0xff19966f868b11d0b42d00c04fc964ff
    这样我们在sql中排序的时候其实是按二进制格式来排序的,而不是字符串格式。
    这样我们在C#中是按字符串格式排序的。

    比较奇怪的是C#中DataView中的列是GUID类型的列,排序时也应该按照十六进制进行排序,而不是按照字符串排序,看来可能是.net的BUG,感谢大家的回答!

  • 相关阅读:
    Visual Studio2017 无法添加引用的解决方法
    第13周学习进度
    mininet之miniedit可视化操作
    构建之法阅读笔记05
    软件工程课堂练习找水王续
    第12周学习进度
    VS2015做单元测试
    学习调用第三方的WebService服务
    软件工程课堂练习找水王
    第11周学习进度
  • 原文地址:https://www.cnblogs.com/YoungPop-Chen/p/3259864.html
Copyright © 2011-2022 走看看