MySQL wykonuje cichą konwersję łańcucha w kontekście numerycznym. Ponieważ oczekuje liczby dla sum()
, MySQL po prostu wykonuje konwersję przy użyciu wiodących „liczb” z ciągu. Zwróć uwagę, że obejmuje to kropki dziesiętne, znak minus, a nawet e
reprezentujący notację naukową. A więc '1e6'
jest interpretowany jako liczba.
W kodzie osobiście dokonałbym konwersji wyraźnie, dodając 0
:
SELECT SUM(parametervalue + 0) FROM table
Jak na ironię, cast()
może zwrócić błąd, jeśli ciąg nie jest w formacie numerycznym, ale w takim przypadku nie zwraca błędu.