MySQL (10.1.24-MariaDB) ORDER BY 条件自动转换为字符串

MySQL (10.1.24-MariaDB) ORDER BY Condition autocasts as string

我有一个动态 MySQL 代码,它确实有一个 ORDER BY 子句。 table 包含多个列,但重要的是 statquality.

stat列是select语句中的数学计算,类型为INT类型,而quality列是STRING类型。

现在我确实有这样的声明:

SELECT (col1+col2+col3) as cast(STAT as unsigned), QUALITY FROM GEAR
ORDER BY CASE WHEN 1=1 THEN stat
              WHEN 1=0 THEN quality END  DESC

现在我确实希望上面场景中的代码以整数方式按 stat 列对结果进行排序:

stat    quality
1       normal
2       normal
3       better
4       better

然而,结果显示的实际方式就像整数被自动转换为字符串一样:

stat    quality
1       normal
11      normal
12      better
2       better

现在如果我:

  1. 删除第二个 case 1=0 语句(永远不会为真)
  2. 将 "quality" 列转换为 int(来自字符串)
  3. 将 WHEN 1=0 THEN QUALITY END DESC 中的 "quality" 值更改为任何其他数字列

该语句将正确运行并按 STAT 以整数方式对输出进行排序。

我试图理解为什么 MySQL (MariaDB) 决定对 stat 整数类型列进行排序string 方式如果 CASE/IF 语句里面 ORDER BY 包含另一个 WHEN[=45= 中的字符串类型列] 并找到避免这种情况发生的方法。

玛丽亚

平底船。不要那样做。

我假设 1=11=0 来自试图控制按哪一列排序的代码?让你的代码更聪明一点——这样它就可以生成

ORDER BY stat

ORDER BY quality

或者,如果您需要一个组合,那么请足够聪明地生成以下组合之一:

ORDER BY stat, quality
ORDER BY quality, stat