Hola ameno123:
Vayamos por partes... en primer lugar, para cambiar de tipo de dato de tu tabla lo harías con un ALTER TABLE, más o menos así.
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.16 sec)
+-------+----------------------+------+-----+---------+----------------+
+-------+----------------------+------+-----+---------+----------------+
+-------+----------------------+------+-----+---------+----------------+
mysql> #Para cambiar el tipo de la columna ID, de SMALLINT a INT
Query OK, 0 rows affected (0.39 sec)
+-------+------------------+------+-----+---------+----------------+
+-------+------------------+------+-----+---------+----------------+
+-------+------------------+------+-----+---------+----------------+
Ahora bien, el problema con el INSERT es
QUE NO LE ESTÁS ASIGNANDO NINGÚN VALOR AL CAMPO ID, si lo estás recuperando de algún parámetro en tu página es posible que el parámetro le esté llegando como una cadena vacía. Sin embargo
NO ES RECOMENDABLE ASIGNARLES VALORES A CAMPOS AUTOINCREMENTALES, es preferible simplemente omitir este campo en el insert o en su defecto enviar siempre un NULL. Observa las diferentes formas en que puedes insertar datos en la tabla:
Código MySQL:
Ver originalQuery OK, 1 row affected (0.28 sec)
Query OK, 1 row affected (0.11 sec)
Query OK, 1 row affected (0.13 sec)
Query OK, 1 row affected (0.09 sec)
Query OK, 1 row affected (0.06 sec)
+----+--------+
| id | campo |
+----+--------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
| 4 | cuatro |
| 5 | cinco |
+----+--------+
El problema al asignar un valor fijo a un campo ID (como en los ejemplos 1 y 4) es que si el valor ya existe en la BD te marque un problema de duplicados:
Código MySQL:
Ver originalERROR
1062 (23000): Duplicate entry
'4' for
key 'PRIMARY'
En lo particular prefiero utilizar la forma del ejemplo tres, donde se listan los campos que quieres insertar
PERO SE OMITEN LOS CAMPOS INCREMENTALES
Saludos
Leo.