转换为INT,按DESC问题排序

时间:2014-10-03 07:02:40

标签: mysql sql

query = "SELECT highest_score FROM users  
         ORDER BY CAST(highest_score AS UNSIGNED) DESC";

我有一个表格highest_score VARCHAR (它应该是 INT ),但这不是问题。

问题是为什么查询返回这个:

  1. -10
  2. 255
  3. 241
  4. 231
  5. 125
  6.   

    由于我投出的最高分为整数,因此不应该为-10   列表的底部?

3 个答案:

答案 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