Mysql 强制转换为INT,按描述问题排序

Mysql 强制转换为INT,按描述问题排序,mysql,sql,Mysql,Sql,我有一个表,其中最高评分列是VARCHAR(应该是INT),但这不是问题所在 问题是为什么查询会返回以下内容: -十, 255 241 231 125 既然我把最高分数定为一个整数,那么-10就不应该是最高分了 排在最后的 您正在将其强制转换为无符号,它不能存储负值。将其强制转换为签名的 执行SELECT CAST('-10'为UNSIGNED)会揭示原因:当您尝试强制转换负值时,UNSIGNED溢出。上述语句的结果是18446744073709552000,该值足够高,足以成为订购时的第一个值

我有一个表,其中
最高评分
列是VARCHAR(应该是INT),但这不是问题所在

问题是为什么查询会返回以下内容:

  • -十,
  • 255
  • 241
  • 231
  • 125
  • 既然我把最高分数定为一个整数,那么-10就不应该是最高分了 排在最后的


    您正在将其强制转换为
    无符号
    ,它不能存储负值。将其强制转换为签名的


    执行
    SELECT CAST('-10'为UNSIGNED)
    会揭示原因:当您尝试强制转换负值时,UNSIGNED溢出。上述语句的结果是
    18446744073709552000
    ,该值足够高,足以成为订购时的第一个值。

    负值转换为
    无符号
    会导致整数溢出,这就是为什么
    -10
    被认为是最大值的原因。

    您使用的是哪种DBMS?您的标题与您的查询不匹配…@NicholasKyriakides您很自然地认为您使用的是MySQL,但不是我们(我同时使用MySQL、Oracle和SQL Server)。总是在问题中添加最准确的标签是一个很好的做法。这只是未来的补充说明。非常感谢,我通常会注意我使用的标签,这次我错过了。
    query = "SELECT highest_score FROM users  
             ORDER BY CAST(highest_score AS UNSIGNED) DESC";
    
    SELECT highest_score FROM users  ORDER BY CAST(highest_score AS **SIGNED**) DESC