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.