朋友在建SQL表时遇到的,没啥难度,不过有可能被忽视的小问题
create table dd_test ( idint int,idname varchar(10))
insert into dd_test select 611 ,'611'
union select 612,'612'
union select 6112,'6112'
union select 70000 ,'70000'
union select 6122 ,'6122'
select * from dd_test
order by idname
int型的排序结果为: 611,612,6112,6122,70000
varchar型的排序结果为:611,6112,612,6122,70000
也就是说如果按varchar型排序的话是可以排的,但是其结果会发生误差:
这个误差造成的原因是,在判断字符串时会从左至右逐个字符判断ASC值,根据此排序,所以6112就会排在612的前面,因为第三位数6112比612小
(在win32的平台对文件的排序也是如此,看看资源管理器就会发现)
create table dd_test ( idint int,idname varchar(10))
insert into dd_test select 611 ,'611'
union select 612,'612'
union select 6112,'6112'
union select 70000 ,'70000'
union select 6122 ,'6122'
select * from dd_test
order by idname
int型的排序结果为: 611,612,6112,6122,70000
varchar型的排序结果为:611,6112,612,6122,70000
也就是说如果按varchar型排序的话是可以排的,但是其结果会发生误差:
这个误差造成的原因是,在判断字符串时会从左至右逐个字符判断ASC值,根据此排序,所以6112就会排在612的前面,因为第三位数6112比612小
(在win32的平台对文件的排序也是如此,看看资源管理器就会发现)