システムのバグを探していたときに、この奇妙な動作に遭遇しました。以下を検討してください。
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です