我有一个表,其中一列是数据类型varchar。以下是一些值:
-.001
-.010
-7.13
当我按降序排序时,它给了我这个:
-7.13
-.010
-.01
这是向后的,但是如果你取数字的绝对值则是正确的。同样,如果我对这些数字的最大值运行查询,它会给我-7.13。
那是MySQL为varchar做的吗?
(P.S。我在Mac上使用Sequel Pro,有时会有一些有趣的设置。这可能是原因吗?)
答案 0 :(得分:2)
没有。变量按字母顺序排序,对于单个字符,它们对应于ASCII编码。在ASCII编码中(见here),句点为“46”,小于0,即“48”。
换句话说,您的值只是按照角色所说的顺序排序。
如果您想要数字排序,则可以使用+ 0
进行静默转换为数字(“静音”表示忽略错误)。那就是:
order by col + 0 desc