Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana pola z typu FLOAT na DOUBLE
Forum PHP.pl > Forum > Bazy danych > MySQL
emjot27
Witam.

Mam bazę danych w której wartości są typu float. Niestety zorientowałem się, że będą w niej zapisywane większe wartości więc muszę zmienić typ na DOUBLE. Operacja taka, niestety sprawia, że wartości w tabelce dostają głupie wartości, bardzo wiele różnych cyfr po przecinku np z liczby 345.26 robi się 345.260009765625 itp...Gdy z powrotem zmieniam na float jest wszystko ok.
Jak najprościej i najbezpieczniej zrobić zmiany typu na double, żeby nie było takich krzaczków?

Pozdrawiam.
nevt
po zmianie typu danych puść zapytanie:
  1. UPDATE `tabela` SET `pole` = ROUND(`pole`, 2);

to ci ładnie zaokrągli wszystkie double do 2 miejsc po przecinku...
emjot27
Witam ponownie. Dzięki za podpowiedź, ale niestety już tak próbowałem i problem polega na tym, że niektóre liczby nie wiadomo dlaczego bierze sobie z kosmosu, jakieś dziwne wartości po zmianie na double, tak więc nawet po zaokrągleniu powstają dziwne liczby np:

z 176111 robi 176110.91
z 170673 robi 170673.37
z 38147.4 robi 38147.44 itd...

Mam w tabelce około 3 tyś rekordów, i sprawdzanie które są ok a które się rozsypały jest trochę uciążliwe....
nevt
no to spróbuj tak:
1. dodaj do tabeli nowe_pole typu DOUBLE (nie zmieniaj typu pola FLOAT)
2. wykonaj:
  1. UPDATE`tabela` SET `nowe_pole` = `stare_pole`;

3. usuń z tabeli stare pole
4. zmień nazwę nowego pola na właściwą

nie gwarantuję, że zadziała, ale warto spróbować.
emjot27
Witam ponownie.
Dzięki za naprowadzenie, niestety Twoja metoda też nie pomogła gdyż efekt był identyczny z poprzednim i stwarzał rekordy o kosmicznych wartościach. Zauważyłem jednak, że w tym przypadku ewidentnie fiksuję sam mysql a że do tej pory wszelkie operacje próbowałem robić tj mi to zaproponowałeś na samym mysql, postanowiłem go trochę oszukać i zrobić to w PHP. Zrobiłem więc taki manewr, tj mi poleciłeś dodałem do tabelki dodatkowe pole typu DOUBLE pt "nowe_pole" ale bez żadnych parametrów i zaokrągleń. Następnie pod PHPem wczytałem wszystkie wartości pola typu float do tablicy po czym uaktualniłem nimi rekordy w w polach typu DOUBLE. Poszło bezbłędnie. Napisałem taki kod:

  1. <?php
  2. $sql_sprawdz = "SELECT * FROM `tabela`";
  3. $wynik = mysql_query($sql_sprawdz);
  4. while($wiersz_sel=mysql_fetch_array($wynik))
  5. {
  6. $sql_up = "UPDATE `tabela` SET `nowe_pole` = ".$wiersz_sel['stare_pole']." WHERE `id`= ".$wiersz_sel['id']." ";
  7. $wynik_up = mysql_query($sql_up);
  8. }
  9. ?>

Teraz jest ok winksmiley.jpg
Pozdrawiam i dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.