緣起
CREATE TABLE `test_tb` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', `value_comment` varchar(100) NOT NULL DEFAULT '' COMMENT '描述', `value_code` int(11) NOT NULL COMMENT '編碼', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
插入4條數據
查詢value_code='abc'的記錄
select * from test_tb where value_code = 'abc'
結果
問題
為何我查的是'abc'返回的是值為0的兩條記錄
原理
Mysql會將傳入的string(要賦值給int字段的)從左到右的第一個非數值開始,將后面的字符串轉成0,再和數值類型相加。
如上述例子就是“abc”->0。查詢為:select * from test_tb where value_code=0
“12abc”->12+0。查詢為:select * from test_tb where value_code=12