Pulpcode

捕获,搅碎,拼接,吞咽

0%

mysql中varchar字段=0的问题

今天同事一下子删除了n条数据库的内容,原因是where语句的部分是这样的:

where tran_no = 0;

但是tran_no 是一个varchar类型的,为什么varchar的类型会导致这条where语句成功?

先看结论:

当比较数字和varchar时,mysql会把varchar转换为数字,首字符为数字0的,或者其他字符的都会转换为0。

所以varchar类型字段=0 只能排除首字符为非零数字的字符串

所以,除了像’2two’这样的字符,大多数字符都被where“抓”到了。

这对于那些在动态语言中(比如php),null,””, 0 各种乱写乱用的人而言,简直就是噩梦。