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