diff --git a/mysqlloadcsv b/mysqlloadcsv index e90415b..369427a 100755 --- a/mysqlloadcsv +++ b/mysqlloadcsv @@ -71,7 +71,7 @@ OPTIONS Vider la table avant d'effectuer le chargement -L, --load-data Charger les données avec la commande 'load data local'. C'est l'option - par défaut. + par défaut. Le fichier est transmis tel quel à MySQL. -I, --insert-data Charger les données en générant des commandes 'insert into'. L'effet est en principe le même avec l'option -L (sauf que certains formats de date @@ -85,12 +85,18 @@ OPTIONS aucune ligne ne correspond à une clé donnée, la mise à jour pour cette ligne est ignorée. Note: utiliser les options -T et -U ensemble n'a pas de sens, mais -T - est quand même honoré." + est quand même honoré. + -Z, --null-value VALUE + Avec les options -I et -U, considérer que NULL est représenté par la + chaine spécifiée. Par défaut, utiliser \N + -z, --null-is-empty + Avec les options -I et -U, considérer que NULL est représenté par la + chaine vide. Cette option est équivalente à -Z ''" } __AWK_MYSQLFUNCS=' function format_sqlvalue(value) { - if (value == "\\N") { + if (value == null_value) { value = "NULL" } else if (value ~ /^[0-9]+$/) { } else if (value ~ /^[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]$/) { @@ -122,6 +128,7 @@ truncate= fake= method=load update_key= +null_value='\N' parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -h:,-H:,--host: host= \ @@ -137,6 +144,8 @@ parse_opts "${PRETTYOPTS[@]}" \ -L,--load-data method=load \ -I,--insert-data method=insert \ -U:,-k:,--update-data: '$method=update; set@ update_key' \ + -Z:,--null-value: null_value= \ + -z,--null-is-empty null_value= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" dbtable="$1"; shift @@ -228,7 +237,7 @@ elif [ "$method" == insert ]; then ac_set_tmpfile inserts [ -n "$truncate" ] && echo "$truncate" >>"$inserts" awkcsv <"$input" >>"$inserts" -s "$skip_lines" -v table="$table" \ - -a "$__AWK_MYSQLFUNCS"'{ + -v null_value="$null_value" -a "$__AWK_MYSQLFUNCS"'{ count = length(ORIGHEADERS) fields = "" for (i = 1; i <= count; i++) { @@ -262,7 +271,7 @@ elif [ "$method" == update ]; then [ -n "$truncate" ] && echo "$truncate" >>"$updates" awkcsv <"$input" >>"$updates" -s "$skip_lines" \ -v table="$table" -v update_key="$update_key" \ - -a "$__AWK_MYSQLFUNCS"'{ + -v null_value="$null_value" -a "$__AWK_MYSQLFUNCS"'{ set_values = "" cond = "" count = length(ORIGHEADERS)