La clave está aquí:
Cita: la duda es por que si la columna esta como aceptar valores nulos y le envio desde formulario ningun valor me sale ese error.
Que una columna pueda aceptar nulos, no implica que no le envíes un valor, sino que ese valor ppuede ser NULL... que no es lo mismo que no enviar nada.
¿Se entiende la diferencia?
Básicamente, si una columna puede ser nula, podría ser:
Pero
no puede ser así:
¿Queda claro?
Es tu responsabilidad hacer que el SQL creado en forma dinámica esté
bien construido y con sus valores correctos.
SI creas mal el SQL, simplemente no te funcionará.
Como aclaración, a la BBDD no le interesa, y no es relevante si tu formulario manda o no datos necesarios. Eso es un problema de programación, y ese tema es OFF TOPIC en este foro de MySQL. Lo que tu tienes que resolver en programación es evitar que el usuario no envíe los datos obligatorios, y resolver qué hacer cuando no los envía y son necesarios.
En otras palabras, deberás programar tu aplicación para no mandarle datos MAL a la base. La base no puede andar adivinando lo que le mandas. Solo debe almacenarlo.