mysql在varchar字段中使用数字val的最大行为

Luk*_*uke 8 mysql max

我们有一个数据库表,其中包含键和值,其值可以是varchar字段中的任何值.值用于关于项的属性,一个属性是价格.

要为价格创建一个选择字段,我正在使用该Max()函数在值列中找到似乎有效的最大值.

然后当我们得到超过100英镑的价格时,他们开始没有作为最大值返回.我认为这是因为它是一个字符串值而不是数字.

当运行命令时会产生混淆,select max(value) from attributes where value > 100 因为现在语句识别出101> 100但99不是因此返回101作为最大值,但是没有该where value > 100子句,99被视为> 101.为什么> 100子句可以作为一个数字比较,但最大不是?

是否有这种情况发生的原因?

ajr*_*eal 21

不要将varchar与数字混合,
想法解决方案只是存储数字用于max聚合函数,
或者

max( cast(value as unsigned) )
Run Code Online (Sandbox Code Playgroud)

当你做一个MAX,是一个演员到字符串.
在进行比较时,是否为数字转换.

原因?
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_max
(它返回最大字符串值)

  • 哦,我脑子里总的来说比较字符串。在这种情况下,`>`子句中的一个操作数是muneric值,因此第二个操作数会自动转换为数字值。抱歉,您是对的。我没专心。 (2认同)