Popolare tabella MySQL con i dati di un file .CVS

  • Creatore Discussione Creatore Discussione Faber
  • Data di inizio Data di inizio

Faber

Nuovo Utente
10 Giu 2014
2
0
0
Gentili esperti,
sono un neofita dell'argomento PHP-MySQL, e sto cercando di popolare una tabella (del DB) con il contenuto di un file .csv. La tabella è costituita da due prime colonne di interi e da altre due colonne di numeri decimali. L'operazione avviene (quasi) con successo, sennonchè alcuni numeri della porzione decimale degli elementi delle ultime due colonne risultano alterati (nella tabella del DB). Come se, durante il "trasferimento" dal .csv al DB, la porzione decimale dei numeri venisse, in parte, modificata arbitrarimente. Il SO è impostato in modo da usare il "." come separatore della parte decimale. Non capisco a cosa sia dovuta questa anomalia. Qualcuno può aiutarmi? Grazie mille.

Le righe del file .csv sono così (separatore di campo ";" e fine riga ","):

1;13111;6.5448130;45.1344600;,
2;13333;6.5505920;45.0846300;,
3;13555;6.5564280;45.0347900;,
4;13777;6.5621080;44.9849600;,

Mentre quello che registro nella Tabella del DB è:

1 13111 6.5448132 45.1344604
2 13333 6.5505919 45.0846291
3 13555 6.5564280 45.0347900
4 13777 6.5621080 44.9849586

Genero la tabella così:

try
{
$sql = 'CREATE TABLE pippo (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
paperino SMALLINT ZEROFILL,
pluto FLOAT(8,7),
topolino FLOAT(9,7)
) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB';
$pdo->exec($sql);
}
catch (PDOException $e)
{
$output = '>>> Errore nella creazione della tabella "pippo" del database "gastone": ' . $e->getMessage();
include 'output.html.php';
exit();
}

Popolo la tabella così:

try
{
$miofile = 'percorso/pippo.csv';
$miatable = 'pippo';
$sql = "LOAD DATA INFILE '$miofile' INTO TABLE $miatable FIELDS TERMINATED BY ';' LINES TERMINATED BY ','";
$query = $pdo->exec($sql);

}
catch (PDOException $e)
{
$output = '>>> Errore nel popolamento della tabella "pippo" del database "gastone": ' . $e->getMessage();
include 'output.html.php';
exit();
}
 
Mi rispondo da solo :)
Il problema si risolve modificando la tipologia numerica delle colonne interessate dall'anomalia da FLOAT a DOUBLE.
In verità mi sarei aspettato che la tipologia FLOAT fosse sufficiente per gestire correttamente almeno 7 cifre decimali, ma si vede che mi sbagliavo.
Saluti.
F
 

Discussioni simili