시스템의 버그를 찾아 낼 때 이상한 동작이 나타났습니다. 다음을 고려하십시오.varchar에 대한 쿼리를 수행 할 때 이상한 동작이 발생했습니다.
우리는 varchar (100) 컬럼을 가진 mysql 테이블을 가지고 있습니다. 다음 sql 스크립트를 참조하십시오.
create table user(`id` bigint(20) NOT NULL AUTO_INCREMENT,`user_id` varchar(100) NOT NULL,`username` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `user_id` (`user_id`)) ENGINE=InnoDB AUTO_INCREMENT=129 DEFAULT CHARSET=latin1;
insert into user(user_id, username) values('20120723145614834', 'user1');
insert into user(user_id, username) values('20120723151128642', 'user1');
내가 다음 쿼리를 실행할 때 나는 0 개의 결과를 받았습니다.
select * from user where user_id=20120723145614834;
하지만 다음과 같이 실행하면 결과가 표시됩니다 (작은 따옴표에 유의하십시오).
select * from user where user_id='20120723145614834';
user_id 필드가 varchar이므로 예상됩니다. 이상한 점은 두 쿼리 모두 결과를 산출한다는 것입니다.
select * from user where user_id=20120723151128642;
select * from user where user_id='20120723151128642';
누구나이 이상한 행동에 대한 이유를 설명 할 수 있습니까? 내 MySQL 버전은 ( 부동 소수점 숫자로 변환 또는 값) 부동 소수점 숫자를 사용하기 때문에 대략적인 5.1.63-0ubuntu0.11.10.1