推薦書籍《可能性的藝術(shù)》
如果MySQL WHERE條件類型和要查詢的字段數(shù)據(jù)類型一致,會對查詢結(jié)果有什么影響呢?
創(chuàng)建一張表
DROP TABLE if EXISTS t_student;
CREATE TABLE t_student (
`id` BIGINT NOT NULL auto_increment COMMENT '主鍵',
`name` VARCHAR(20) COMMENT '姓名',
`number` VARCHAR(10) COMMENT '學(xué)號',
primary key(`id`)
) ENGINE=INNODB DEFAULT charset=utf8 COMMENT '學(xué)生表';
表里插入數(shù)據(jù)
INSERT INTO t_student VALUES (NULL, 'lilei', '1');
INSERT INTO t_student VALUES (NULL, 'hanmeimei', '2');
INSERT INTO t_student VALUES (NULL, 'jim', '2');
查詢
SELECT * FROM t_student
一:查詢數(shù)據(jù)(類型一致)
SELECT * FROM t_student WHERE number = '1';
WHERE條件字段數(shù)據(jù)類型和要查詢字段的實(shí)際數(shù)據(jù)類型一致,結(jié)果是沒有問題的。
二:查詢數(shù)據(jù)(類型不一致)
SELECT * FROM t_student WHERE number = 1;
WHERE條件是Int類型,MySQL會把number列的數(shù)據(jù)(VARCHAR)轉(zhuǎn)成Int類型,然后再和條件匹配,此時匹配到一條數(shù)據(jù)。
SELECT * FROM t_student WHERE number = 2;
同理:WHERE條件是Int類型,MySQL會把number列的數(shù)據(jù)轉(zhuǎn)成Int類型,然后和條件匹配,此時匹配到一條數(shù)據(jù)。
SELECT * FROM t_student WHERE number = 0;
WHERE條件是Int類型,MySQL會把number列的數(shù)據(jù)轉(zhuǎn)成Int類型,然后匹配。number列類型是字符串,非數(shù)字字符串轉(zhuǎn)成Int類型,會轉(zhuǎn)成0,此時匹配到一條數(shù)據(jù)。