En resumen, tengo un archivo SQL que quiero importar como un archivo de estilo skel
, por lo que esto se hará de forma repetida, mediante programación. Puedo editar el archivo SQL como quiera, pero prefiero no tocar la aplicación en sí.Cómo forzar a MySQL a tomar 0 como valor autoincrementado válido
Esta aplicación usa userid = 0
para representar al usuario anónimo. También tiene una entrada relevante (en blanco) en la base de datos para representar este 'usuario'. Por lo tanto, la línea en mi skel.sql
ve algo como esto:
INSERT INTO `{{TABLE_PREFIX}}users` VALUES (0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
El problema con esto es que es un campo uid
auto_increment
, para lo cual, técnicamente, 0
es un valor no válido. O al menos, si lo configuras en 0, básicamente le estarás diciendo a MySQL: "Por favor, inserta la siguiente identificación en este campo".
Ahora, supongo que podría poner a continuación, una consulta INSERT
UPDATE
en mi archivo SQL, pero hay una manera de decirle a MySQL, en general, que sí, que en realidad quiero insertar 0
en este campo?
Una cosa de la que debes tener cuidado: 'sql_mode' es una lista de banderas delimitada por comas. Si lo hace 'sql_mode = 'NO_AUTO_VALUE_ON_ZERO'', puede deshabilitar inadvertidamente otras banderas – Kip
Esta solución funcionó básicamente para mí, sin embargo, mi volcado también incluyó algunos lugares donde estaba anulando el' sql_mode' en el medio del archivo sql y luego restablecer a la variable 'OLD_SQL_MODE' que se configuró para volver al final del script. Esto estaba anulando mi 'NO_AUTO_VALUE_ON_ZERO' en el medio de mi script, haciendo que esto no funcione. Mi solución fue crear una nueva variable de 'INIT_OLD_SQL_MODE' que solía restablecer al final y después de establecer' sql_mode' en 'NO_AUTO_VALUE_ON_ZERO', establecí una nueva variable de' OLD_SQL_MODE' que esas modificaciones temporales podrían restablecerse a –