Eksport fra database - felter med NULL
Hej,Jeg sidder og er ved at implementere noget automatisk backup via php. Det fungerer fint med at der automatisk dannes en liste over databaser og deres tabeller. Jeg kan sagtens hente data ud og gemme det i en fil som planlagt, men dog kan jeg ikke undgå at ændre i dataene når jeg gemmer dem.
Problemet er, at jeg ikke ved om tomme felter skal opfattes som NULL-værdier eller som en tom tekst ''.
Det hele kan illustreres på billedet herunder, hvor første kolonne under hver type er sat til "default NULL":
http://s2.postimage.org/b83zizcd5/null_problematikken.png
Hvor tabellen er oprettet med:
CREATE TABLE `test` (
`int` int(11) default NULL,
`int2` int(11) NOT NULL,
`varchar` varchar(5) default NULL,
`varchar2` varchar(5) NOT NULL,
`datetime` datetime default NULL,
`datetime2` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO test VALUES (NULL, NULL, NULL, NULL, NULL, NULL), (0,0,0,0,0,0), ('','','','','','')
`int` int(11) default NULL,
`int2` int(11) NOT NULL,
`varchar` varchar(5) default NULL,
`varchar2` varchar(5) NOT NULL,
`datetime` datetime default NULL,
`datetime2` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO test VALUES (NULL, NULL, NULL, NULL, NULL, NULL), (0,0,0,0,0,0), ('','','','','','')
Som det ses er der forskel på hvad man anvender. Koden jeg bruger er en smule forsimplet:
$line = "INSERT INTO `{$table}` (";
foreach($row as $name => $val)
$line .= "`{$name}`,";
$line = substr($line,0,-1) . ') VALUES (";
foreach($row as $val)
$line .= "'{$val}',";
echo substr($line, 0, - 1) . ')';
foreach($row as $name => $val)
$line .= "`{$name}`,";
$line = substr($line,0,-1) . ') VALUES (";
foreach($row as $val)
$line .= "'{$val}',";
echo substr($line, 0, - 1) . ')';
1) Min umiddelbare tanke er, at jeg ved hjælp af querien til at oprette databasen kan se hvilke kolonner, der som standard er NULL, men det giver mig så ikke noget svar på om f.eks. et felt af typen VARCHAR skal være NULL eller ej.
2) Jeg er dog også kommet frem til, at for kolonner som ikke understøtter NULL, gør det ikke nogen forskel om man anvender det alligevel. Så måske man blot bør konvertere alle tomme værdier til NULL?
Mit spørgsål er altså, om det er nogen fornuftig måde at tjekke om et givent felt skal have en tom tekstværdi eller en NULL-værdi, når man eksportere fra en vilkårlig database til en anden? Kan man følge fremgangsmåde bag 2) eller bør man vælge 1) ?
