在MySQL中,VARCHAR字段匹配0数字文字但不适用于数字文字1.这种行为的原因是什么?
答案 0 :(得分:2)
在上一个示例中,MySQL将尝试将CAST
列VARCHAR
列为数值。当您尝试将非数字字符串转换为,例如,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。