SQL - przecinek a kropka
SQL to naprawdę fajna rzecz. Przekonałem się o tym, pisząc małą aplikację webową. Miała się zająć ściąganiem danych z różnych stron internetowych i przetwarzanie ich w jedną zgrabną tabeleczkę.
Po mimo tego, że jestem samoukiem napisanie tego nie było wielkim wyzwaniem, ale nie pomyślałem o jednym... pobranie kilku stron internetowych, wykrojenie tego, co potrzebne i wyświetlenie tego może być trochę czasochłonne, i było. Tak to się dzieje jak się nie pomyśli naprzód. Najwięcej trwała obróbka danych, jeśli zrobiłem to raz na dobę i zapisałem do bazy oszczędzałem bardzo dużo czasu. Z pomocą przyszedł mi MySQL. Funkcje, które są dostępne poprzez odpowiednie rozszerzenia w php są cudowne (przynajmniej dla moich zastosowań), jednak coś nie grało. Dane nie chciały się zapisywać choć powinny i tutaj zaczyna się problem!!
SQL nienawidzi przecinka!
Nie jestem ekspertem w SQL w sumie to prócz "SELECT, UPDATE, INSERT i WHERE" nic więcej nie jest mi potrzebne i nawet nie wiem, czy coś jest :D Męczyłem się prawie godzinę. Dane były zbierane prawidłowo. Sprawdziłem, czy w ustawiłem w SQL dobry typ danych. No był float, bo potrzebowałem obsługi liczb zmiennoprzecinkowych. W końcu stwierdziłem, że wpiszę jakieś dane ręcznie i zobaczę czy działa. Wpisałem "1"... i działało. No to wpisałem "1,5"... i ku mojemu zdziwieniu nie działało. - "Co jest grane? Float, to float, dlaczego to ****** nie działa? A co mi tam, spróbuje tego." - wpisałem "1.5". Ku mojemu zdziwieniu wszystko działo poprawnie.
Jedna mała kropka doprowadziła mnie do szaleństwa!
Wszystkie dane jakie zbierał mój program były z naszym swojskim polskim przecinkiem. Rozwiązanie przyszło szybko i mam nadzieję, że ten artykuł, jaki i banalne rozwiązanie uchroni niedzielnych programistów przed wyrwaniem wszystkich włosów z głowy.
Przejdźmy do jednej linijki kodu, która podsumowała moja całogodzinną pracę:
$var=str_replace(",",".",$var);
W ten sposób zmieniliśmy wartość z przecinkiem na wartość z kropką, która idealnie współpracuje z naszą bazą SQL. Prawdopodobnie mój problem zostałby wyśmiany przez doświadczonych programistów, ale człowiek się uczy całe życie i teraz wiem, że kropka a przecinek robi różnicę. Mam nadzieję, że Ci, którzy jeszcze nie wiedzieli, po przeczytaniu tego wpisu przejrzą na oczy i tak jak ja już więcej nie popełnią takiego błędu.