query = "SELECT highest_score FROM users
ORDER BY CAST(highest_score AS UNSIGNED) DESC";
我有一个表格highest_score
列 VARCHAR (它应该是 INT ),但这不是问题。
问题是为什么查询返回这个:
由于我投出的最高分为整数,因此不应该为-10 列表的底部?
答案 0 :(得分:5)
将否定值转换为unsigned
会导致整数溢出,这就是-10
被视为最大值的原因。
答案 1 :(得分:3)
您将其投射到无法存储负值的UNSIGNED
。将其投放到SIGNED
。
执行SELECT CAST('-10' AS UNSIGNED)
会显示原因:当您尝试转换负值时,UNSIGNED会溢出。上述陈述的结果是18446744073709552000
,它足以成为您订购时的第一个。
答案 2 :(得分:0)
SELECT highest_score FROM users ORDER BY CAST(highest_score AS **SIGNED**) DESC