Với bảng:So sánh chuỗi với trường số trở về kết quả bất ngờ
CREATE TABLE IF NOT EXISTS `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Thêm một vài hàng:
INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve');
Tại sao, OH TẠI SAO! không trả lại kết quả truy vấn này:
SELECT * FROM `users` WHERE id = "2this-is-not a numeric value"
Kết quả:
query returned 1 row(s) in 0.0003 sec
id name
-----------------
2 Larry
Các chuỗi được sử dụng trong mệnh đề where được rõ ràng được chuyển đổi sang một giá trị số - người đã nói để làm điều đó ?! Tôi không thể tìm thấy bất kỳ tài liệu nào cho thấy mysql hoặc PHP sẽ tự động gán chuỗi ký tự của tôi.
Điều này chỉ hoạt động nếu ký tự số là ký tự đầu tiên trong chuỗi, "this 2 is not numeric"
sẽ không trả lại kết quả. "12 2"
sẽ trở thành 12
, "1 2"
(một không gian hai) trở thành 1
.
Mọi bài viết hoặc tài liệu giải thích về hành vi này sẽ được đánh giá cao.
mysql doens't sử dụng 'thay vì "để biểu thị chuỗi nó chỉ có thể nhìn vào giá trị số cố gắng đúc nó vào numerber ngầm và sau đó cắt ngắn Vì vậy, ... Tại sao oh tại sao!: D là bạn sử dụng dấu ngoặc kép cho một lĩnh vực Numeric buộc nó để làm một chuyển đổi tiềm ẩn? không cần phải nói tôi tin rằng nó hành vi kỳ lạ là tốt .. – xQbert
Hoặc là tôi luôn luôn sử dụng dấu nháy đơn cho mã, vì vậy tôi luôn luôn gửi báo giá gấp đôi để sql –
Tôi tự hỏi những gì bạn sẽ nhận được kết quả nếu bạn cast chuỗi của bạn để bigint ngầm trong một lựa chọn.Nếu bạn nhận được 2 ... thì đó là chuyển đổi tiềm ẩn và o của tôi là Hành vi ODD. – xQbert