不使用CAST的VARCHAR字段的mysql SUM

com*_*tIt 4 mysql

当在MySql数据库中查询类型为VARCHAR的字段使用SUM时,SUM会自动将其转换为数字吗?我通过使用尝试了这个

  SELECT SUM(parametervalue) FROM table
Run Code Online (Sandbox Code Playgroud)

并且它揭示了MySql返回总和,虽然我预计会抛出一个错误,因为"parametervalue"字段是VARCHAR类型

Gor*_*off 9

MySQL对数字上下文中的字符串进行静默转换.因为它需要一个数字sum(),MySQL只使用字符串中的前导"数字"进行转换.请注意,这包括小数点,减号,甚至e代表科学记数法.所以,'1e6'被解释为一个数字.

在代码中,我个人会通过添加0以下内容来明确转换:

SELECT SUM(parametervalue + 0) FROM table
Run Code Online (Sandbox Code Playgroud)

具有讽刺意味的是,cast()如果字符串不是数字格式,则可能会返回错误,但在这种情况下,这不会返回错误.