Verilen tablo:dönen sayısal alanına karşı dize karşılaştırma beklenmedik sonuçlar
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 ;
satır bir çift ekleyin:
INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve');
Neden, NEDEN OH! yapar bu sorgu dönüş sonuçları:
SELECT * FROM `users` WHERE id = "2this-is-not a numeric value"
Sonuç:
query returned 1 row(s) in 0.0003 sec
id name
-----------------
2 Larry
fıkra açıkça sayısal değere dönüştürülür ediliyor kullanılan dize - bunu söyledi ?! Mysql veya PHP'nin dize değişmezini otomatik olarak yayınlayacağını varsayan hiçbir belge bulamıyorum.
Bu, yalnızca sayısal karakter dizedeki ilk karakterse işe yarar, "this 2 is not numeric"
sonuç döndürmez. "12 2"
, 12
, "1 2"
(one-space-two), 1
olur.
Bu davranışı açıklayan tüm makaleler veya belgeler takdir edilecektir.
doens't MySQL kullanımı 'yerine sadece kesmek sonra örtülü olarak numerber için döküm denemek ve sayısal değer bakıyor olabilir nümerik olmayan değerler ... Öyleyse neden niçin: D: Sayısal bir alan için, örtülü bir dönüşüm yapmak zorunda kalmaya zorlayan alıntılar mı kullanıyorsunuz? Ben de garip davranışlara inanıyorum demeye gerek yok .. – xQbert
Her zaman. kod için, bu yüzden her zaman sql –
için çift tırnaklar göndermek Ben bir seçim içinde örtülü olarak bigint için dize döküm eğer sonuç alacağını merak ediyorum.Eğer 2 alırsanız ... o zaman örtülü dönüşüm ve benim ODD davranışı – xQbert