SELECT INTO OUTFILE (MySQL)
Null-waardes en \N
Bij het schrijven naar een bestand, substitueert MySQL lege velden met \N
. De gebruikelijke oplossing lijkt te zijn om null-waardes te vervangen voor lege strings, met de functie IFNULL
of COALESCE
. De voorbeeldcode die ik zo snel tegenkwam, maakte gebruik van een cursor. Da's nou juist niet elegant als je SQL gebruikt. Plus dat ik het graag dynamisch wil, want soms heb ik met tabellen te maken met erg veel velden.
De oplossing: Een stored procedure met een prepared statement die de naam van een tabel als argument meekrijgt, met alle updates in één statement, zonder cursor, en waarbij de namen van de kolommen uit information_schema
komen. Zo!
-- -------------------------------------------------------------------------------- -- Routine DDL -- Note: comments before and after the routine body will not be stored by the server -- -------------------------------------------------------------------------------- DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `ExportFixNull`(in tblname tinytext) BEGIN set @string=concat( "Update ",@tblname," set ", ( select group_concat(column_name,"=ifnull(",column_name,",'')") from information_schema.columns where table_name=@tblname ) ,";" ); prepare s1 from @string; execute s1; drop prepare s1; END
Bronnen
- http://dev.mysql.com/doc/refman/5.7/en/select-into.html
- http://stackoverflow.com/questions/18891104/mysql-select-into-outfile-text-file-tab-seperated-with-line-breaks - Iemand met hetzelfde probleem
- http://stackoverflow.com/questions/3255766/mysql-into-outfile-escape-or-replace-new-lines-in-data
- http://stackoverflow.com/questions/4628653/remove-ns-when-doing-select-into-outfile