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,感谢大家的回答!

  • 相关阅读:
    vc6.0执行程序正确而debug版和release版运行错误
    visio调整画布大小和旋转画布
    Safecracker(暴力)
    gets()
    MATLAB——axis
    截尾平均数及利用SPSS求截尾平均数
    MATLAB求实数绝对值——abs
    MATLAB描绘饼图——pie
    error: expected unqualifiedid before 'int'
    MATLAB描绘极坐标图像——polar
  • 原文地址:https://www.cnblogs.com/YoungPop-Chen/p/3259864.html
Copyright © 2011-2022 走看看