Mysql 5.6中字母与数字的关系

Mysql 5.6中字母与数字的关系,mysql,sql,alphanumeric,Mysql,Sql,Alphanumeric,为什么“a”在包含int和string以及max、min或avg操作的列中位于任何整数之前 查询上下文:- select max(col1),max(col2),min(col2),avg(col3) from ( select 1 as col1, 2 as col2, 3 as col3 union select 5, 6, 7 union select 7, 8, 9 union select 0, 1, 2 union select 1, 2, 3 union select

为什么“a”在包含int和string以及max、min或avg操作的列中位于任何整数之前

查询上下文:-

select max(col1),max(col2),min(col2),avg(col3) 
from 
(
select 1 as col1, 2  as col2, 3  as col3 
union select 5, 6, 7 
union select 7, 8, 9 
union select 0, 1, 2
union select 1, 2, 3
union select 'a','b','c'
) as result_set;
结果:-

| max(col1) | min(col2) | avg(col3) |
|-----------|-----------|-----------|
|         a |         1 |      4.25 |
SQLFIDLE代码段:-


我有点惊讶,这些列是字符串而不是数字。在许多情况下,当数字和字符串组合在一起时,得到的类型是数字——这将把
'a'
变成
0

也就是说,您将获得字符串排序。这大概跟在ASCII字符集后面。在此字符集中,数字(如
'1'
)的“字母顺序”低于字母


不幸的是,
UNION-ALL
的类型规则并不明确。似乎对字符串有偏见,这与算术计算不同(
0='a'
,例如,返回“true”,因为
'a'
被转换为一个数字)。

喜欢小提琴与发布的代码不匹配,发布的代码也不会产生发布的结果。是的,我拼命寻找答案,我得到的唯一答案是倾向于“所有”关键字。所以我一直在调整小提琴。非常感谢您的帮助。