2012-06-13 14 views
6

względu na stół:Porównywanie ciąg przeciwko pola liczbowego powrocie nieoczekiwane wyniki

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 ; 

dodać kilka wierszy:

INSERT INTO `users` (`id`,`name`) VALUES (NULL , 'Bob'),(NULL , 'Larry'),(NULL , 'Steve'); 

Dlaczego, och dlaczego! Czy to powrót wyników zapytania:

SELECT * FROM `users` WHERE id = "2this-is-not a numeric value" 

Wynik:

query returned 1 row(s) in 0.0003 sec 
id name 
----------------- 
2 Larry 

napis używany w przypadku gdy klauzula jest wyraźnie są konwertowane do wartości liczbowej - który powiedział to zrobić ?! Nie mogę znaleźć żadnej dokumentacji, która sugerowałaby, że mysql lub PHP zakładały automatyczne rzutowanie mojego ciągu literowego.

Działa to tylko wtedy, gdy znak numeryczny jest pierwszym w łańcuchu, "this 2 is not numeric" nie zwróci wyników. "12 2" stanie się 12, "1 2" (jedno-przestrzeni-dwa) staje się 1.

Wszelkie artykuły lub dokumentacja wyjaśniająca to zachowanie będą mile widziane.

+0

użytku doens't mysql 'zamiast "oznaczający ciąg może być po prostu patrząc na wartość numeryczną spróbować oddać go do numerber niejawnie, a następnie obciąć A więc ... Dlaczego, och dlaczego!: D używasz cytatów dla pola Numerycznego, zmuszając go do niejawnej konwersji? nie muszę dodawać, że uważam to za dziwne zachowanie – xQbert

+0

Albo. Zawsze używam pojedynczych cudzysłowów dla kodu, więc zawsze wysyłam podwójne cytaty do sql –

+0

Zastanawiam się, jaki wynik uzyskałbyś, jeśli rzucisz swój ciąg do biginta niejawnie w selekcji. Jeśli uzyskasz 2 ... to jest to niejawna konwersja i moja jest moja Zachowanie ODD – xQbert

Odpowiedz

10
+1

'SELECT CONVERT (" 2-to-nie-to wartość liczbowa ", UNSIGNED)' zwraca '2'. Może mógłbyś dodać to do swojej odpowiedzi. – Mike

+0

NIE PODOBAĆ. Chcę 0 wyników - żaden wiersz nie ma id "2yourmom". Kiedy mówię "WHERE id =" 2yourmom "', mam na myśli dosłownie, gdzie id jest równy tej wartości. Automatycznie rzucaj, gdy tylko to się zdarzy, w dowolnym języku. W każdym razie ... dzięki za link: D –

+0

+1 to Nails powód. Niejawne konwertowanie w mysql Zrzuci wartości nieliczbowe po int, a następnie dokona niejawnej konwersji. Strasznie dla mnie straszny, ale jest w dokumentach. – xQbert

Powiązane problemy