數(shù)據(jù)庫(kù)某張表的某個(gè)字段(比如說(shuō)test_id)類型為varchar,默認(rèn)值為'0'沛励。
代碼里SQL查詢條件為 test_id != 0
這里很明顯可以發(fā)現(xiàn)條件的類型不對(duì),應(yīng)該改成test_id != '0'
炮障。
但是上面那個(gè)寫法并不會(huì)報(bào)錯(cuò)目派,因?yàn)镸ySQL在比較數(shù)字和字符串的時(shí)候,會(huì)自動(dòng)轉(zhuǎn)換字符串和數(shù)字胁赢。
不過(guò)這個(gè)轉(zhuǎn)換有點(diǎn)問(wèn)題企蹭,具體的看下面的例子:
SELECT '8a' != 0 ,'a' != 0, '0c' != 0;
輸出結(jié)果為:
'8a' != 0 | 'a' != 0 | '0c' != 0 |
---|---|---|
1 | 0 | 0 |
其中,1代表true,0代表false谅摄。
可以看出在比較時(shí)會(huì)將字符串轉(zhuǎn)成數(shù)字徒河,轉(zhuǎn)換規(guī)則為如果字符串的值為數(shù)字,直接轉(zhuǎn)成數(shù)字送漠,否則認(rèn)為是0顽照。