为什么 mysql 没有为浮点数的 varchar 返回正确的顺序?

why is mysql not returning correct order for varchar of floats?

我有一个 version 列,它是 varchar 但包含 double 个值。 当我尝试获取最新(最大)版本时,我得到的结果不正确。但是当我做 min 时,我得到了正确的结果。

包含double的varchar列的排序是如何确定的?

这是我的内容 table;

    mysql> Desc Application;
    +---------+------------------+------+-----+---------+----------------+
    | Field   | Type             | Null | Key | Default | Extra          |
    +---------+------------------+------+-----+---------+----------------+
    | id      | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
    | version | varchar(50)      | YES  |     | NULL    |                |
    +---------+------------------+------+-----+---------+----------------+
    2 rows in set (0.01 sec)

    mysql> select * from Application;
    +----+---------+
    | id | version |
    +----+---------+
    |  1 | 0.0.0   |
    |  2 | 0.0.1   |
    |  3 | 0.0.2   |
    |  4 | 0.1.0   |
    |  5 | 0.1.1   |
    |  6 | 0.1.2   |
    |  7 | 1.0.0   |
    |  8 | 1.0.1   |
    |  9 | 1.1.1   |
    | 10 | 8.7.3   |
    | 11 | 10.29.0 |
    +----+---------+
    11 rows in set (0.00 sec)

    select max(version) from application;
+--------------+
| max(version) |
+--------------+
| 8.7.3        |
+--------------+
1 row in set (0.00 sec)

mysql> select version from application
    -> ORDER BY version DESC
    -> LIMIT 1;
+---------+
| version |
+---------+
| 8.7.3   |
+---------+
1 row in set (0.00 sec)

mysql> select min(version) from application;
+--------------+
| min(version) |
+--------------+
| 0.0.0        |
+--------------+
1 row in set (0.00 sec)

忘记这些是花车的想法吧。 MySQl 将它们视为字符串,因为这就是您告诉它的内容。

字符排序,8最大,0最小,所以你的结果是正确的。

如果您希望 MySQL 按数字顺序排序,请为其提供数字字段。或者,右对齐并用零填充您的子字段 - 08.07.03 小于 10.29.00