今天同事一下子删除了n条数据库的内容,原因是where语句的部分是这样的:
where tran_no = 0;
但是tran_no
是一个varchar类型的,为什么varchar的类型会导致这条where语句成功?
先看结论:
当比较数字和varchar时,mysql会把varchar转换为数字,首字符为数字0的,或者其他字符的都会转换为0。
所以varchar类型字段=0 只能排除首字符为非零数字的字符串
所以,除了像’2two’这样的字符,大多数字符都被where“抓”到了。
这对于那些在动态语言中(比如php),null,””, 0 各种乱写乱用的人而言,简直就是噩梦。