numeric literal 0等于VARCHAR列中的任何内容

时间:2015-07-20 08:06:11

标签: mysql expression

在MySQL中,VARCHAR字段匹配0数字文字但不适用于数字文字1​​.这种行为的原因是什么?

image

1 个答案:

答案 0 :(得分:2)

在上一个示例中,MySQL将尝试将CASTVARCHAR列为数值。当您尝试将非数字字符串转换为,例如,DECIMAL转换将在第一个非数字字符处停止。空字符串将匹配0

例如:

> select cast('x123' as decimal);
+-------------------------+
| cast('x123' as decimal) |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)

> show warnings;
+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect DECIMAL value: 'x123' |
+---------+------+-------------------------------------------+

另一方面,如果您有前导数字字符,那么它们将转换为十进制:

> select cast('123x' as decimal);
+-------------------------+
| cast('123x' as decimal) |
+-------------------------+
|                     123 |
+-------------------------+
1 row in set (0.00 sec)

在这种情况下,将静默忽略非数字尾随字符。转换为INTEGER将以类似的方式进行,结果相同。有关详细信息,请参阅manual