Per farla breve, ho un file SQL che voglio importare come file stile skel
, quindi questo sarà ripetuto, a livello di programmazione. Posso comunque modificare il file SQL, ma preferirei non toccare l'applicazione stessa.Come forzare MySQL a prendere 0 come valore di incremento automatico valido
Questa applicazione utilizza userid = 0
per rappresentare l'utente anonimo. Ha anche una voce (vuota) rilevante nel database per rappresentare questo 'utente'. Di qui, la linea della mia skel.sql
simile a questa:
INSERT INTO `{{TABLE_PREFIX}}users` VALUES (0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
Il problema di questo è che uid
è un campo auto_increment
, per i quali, tecnicamente, 0
è un valore non valido. O almeno, se lo imposti a 0, stai praticamente dicendo a MySQL, "Per favore inserisci il prossimo ID in questo campo."
Ora, suppongo ho potuto mettere un INSERT
poi un UPDATE
query in mio file SQL, ma c'è un modo di raccontare MySQL in generale che sì, io in realtà voglio inserire 0
in questo campo?
Una cosa da fare attenzione: 'sql_mode' è un elenco di flag delimitato da virgole. Se esegui 'sql_mode = 'NO_AUTO_VALUE_ON_ZERO'', potresti disabilitare inavvertitamente altri flag – Kip
Questa soluzione ha funzionato in pratica per me, tuttavia il mio dump includeva anche alcuni punti in cui sovrascriveva' sql_mode' nel mezzo del file sql e quindi reimpostando alla variabile 'OLD_SQL_MODE' che è stata impostata per tornare alla fine dello script. Questo stava annullando il mio 'NO_AUTO_VALUE_ON_ZERO' nel bel mezzo del mio script, rendendo questo non funziona. La mia soluzione era di creare una nuova variabile di 'INIT_OLD_SQL_MODE' che ho usato per resettare alla fine e dopo aver impostato' sql_mode' in 'NO_AUTO_VALUE_ON_ZERO', ho impostato una nuova variabile di' OLD_SQL_MODE' che quelle sostituzioni temporanee potevano essere reimpostate su –