关于GUID排序问题,望高人回答!

jerry01 2008-09-18 05:11:15
在数据库中执行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,和数据库列数据类型相同!
...全文
663 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyde100 2008-09-19
  • 打赏
  • 举报
回复

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
hyde100 2008-09-19
  • 打赏
  • 举报
回复
所以,guid类型来排序没有什么实际的意思,毕竟它是随机的。
hyde100 2008-09-19
  • 打赏
  • 举报
回复
在数据库中,我们用的guid是16字节,它的存储方式是二进制。
我们看到的只是它的字符串格式,例如
字符串格式: '6F9619FF-8B86-D011-B42D-00C04FC964FF'
---------------------------------------------------
而实际上它的存储格式为二进制,例如:
二进制格式: 0xff19966f868b11d0b42d00c04fc964ff
这样我们在sql中排序的时候其实是按二进制格式来排序的,而不是字符串格式。
这样我们在C#中是按字符串格式排序的。

以上,就出现了楼主那样的结果
jerry01 2008-09-19
  • 打赏
  • 举报
回复
比较奇怪的是C#中DataView中的列是GUID类型的列,排序时也应该按照十六进制进行排序,而不是按照字符串排序,看来可能是.net的BUG,感谢大家的回答!
jerry01 2008-09-18
  • 打赏
  • 举报
回复
order by没有问题,dawugui你用的是字符串,我的数据类型为GUID(uniqueidentifier)
等不到来世 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]
不会吧?
[/Quote]
order by 估计写得有点问题吧
hanzixuan 2008-09-18
  • 打赏
  • 举报
回复
.......
dawugui 2008-09-18
  • 打赏
  • 举报
回复
select 'FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3' id union
select 'E23CADA8-542C-4D83-865D-FA279BDA904F'
order by id
/*
id
------------------------------------
E23CADA8-542C-4D83-865D-FA279BDA904F
FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3

(所影响的行数为 2 行)
*/

select 'FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3' id union
select 'E23CADA8-542C-4D83-865D-FA279BDA904F'
order by id desc

/*
id
------------------------------------
FA22DA92-DA37-46B6-99EA-09BDCDFCDBB3
E23CADA8-542C-4D83-865D-FA279BDA904F
(所影响的行数为 2 行)
*/
dawugui 2008-09-18
  • 打赏
  • 举报
回复
不会吧?
打开链接下载源码: https://pan.quark.cn/s/64cfd9352cf7 VLC播放器是一款备受青睐的跨平台开源多媒体播放软件,其3.0.11版本在继承既有卓越功能的同时,显著优化了对特定音视频编码格式的兼容性,尤其着重于对AVS+和DRA这两种源自中国的编码标准的支持。这一改进使得VLC不仅能够处理国际上通行的H264和H265视频编码,以及AC3音频编码,更能契合国内用户的播放需求,流畅播放采用AVS+和DRA编码的多媒体资料。1. **AVS+(Advanced Video Coding Plus)**:AVS+是中国自主设计的一种高效视频编码规范,其核心目标在于提升编码效能,减少带宽占用,特别适用于高清及超高清视频的传输。相较于早期的AVS技术,AVS+在编码效能、图像质量和实现难度上取得了更优的均衡,为国内的电视广播、IPTV、网络视频等领域提供了定制化的解决方案。2. **DRA(Digital Radio Audio)**:DRA是一种基于数字音频广播的高保真音频编码技术,由中国独立研发而成。该技术支持多样化的码率和声道布局,确保提供卓越的音频体验,同时具备优异的网络适应性及低延迟表现,适用于广播、互联网音频传输等多种使用场景。3. **H264(亦称AVC)**:H264是一种高效视频压缩规范,广泛应用于在线视频、流媒体服务、蓝光光盘等领域,其显著优势在于能够在较低的码率下呈现高清晰度的视频画面。4. **H265(亦称HEVC)**:作为H264的升级版标准,H265在压缩效率上实现了进一步突破,相同画质下可将文件大小减半,这对4K、8K等超高清视频的传输和存储尤为关键。5. **AC3(Dolby Digital)**:AC3是...

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧