valor registro por insertar hora fecha ejemplos defecto campo año automática automatico actual mysql mysql-error-1067

registro - MySQL: agregando el año actual como valor predeterminado para un campo ''año''



mysql año actual (2)

Tengo la siguiente tabla en MySQL (versión 5):

id int(10) UNSIGNED No auto_increment year varchar(4) latin1_swedish_ci No title varchar(250) latin1_swedish_ci Yes NULL body text latin1_swedish_ci Yes NULL

Y quiero que el DB agregue automáticamente el año actual en la inserción, he intentado con la siguiente declaración SQL:

ALTER TABLE `tips` CHANGE `year` `year` VARCHAR( 4 ) NOT NULL DEFAULT year(now())

Pero da el siguiente error:

1067 - Invalid default value for ''year''

¿Qué puedo hacer para obtener esta funcionalidad? ¡Gracias por adelantado!

@ gabriel1863: Gracias por la respuesta, pero sigo recibiendo el mismo error. Incluso cuando uso los apoyos en el campo del año.

¡Gracias a todos por la ayuda!


La cláusula de valor DEFAULT en una especificación de tipo de datos indica un valor predeterminado para una columna. Con una excepción, el valor predeterminado debe ser una constante; no puede ser una función o una expresión. Esto significa, por ejemplo, que no puede establecer el valor predeterminado para una columna de fecha como el valor de una función como NOW () o CURRENT_DATE. La excepción es que puede especificar CURRENT_TIMESTAMP como predeterminado para una columna TIMESTAMP.

- Manual de MySQL

Sin embargo, puede escribir un disparador que establezca el valor. Desearía poder ayudar, pero no estoy muy familiarizado con la escritura de procedimientos almacenados en MySQL.

Creo que esto funcionaría:

CREATE TRIGGER ins_year BEFORE INSERT ON tips FOR EACH ROW SET NEW.year = YEAR(NOW());


Lo siguiente debería funcionar:

ALTER TABLE tips MODIFY COLUMN year YEAR(4) NOT NULL DEFAULT CURRENT_TIMESTAMP

Por favor, consulte el Tipo de datos anuales para obtener más información.

Entonces, probé esto una vez que obtuve acceso y no funciona. Como señalaba otro cartel, CURRENT_TIMESTAMP solo funciona en el tipo de datos TIMESTAMP .

¿Existe un problema específico con el almacenamiento de una marca de tiempo completa y luego solo usa el año en su código? Si no, entonces recomendaría almacenar este valor como una marca de tiempo.

Su otra opción sería crear un disparador :

CREATE TRIGGER example_trigger AFTER INSERT ON tips FOR EACH ROW BEGIN UPDATE tips SET year = YEAR(NOW()) WHERE tip_id = NEW.tip_id END;

De lo contrario, asigne este valor a la instrucción INSERT desde dentro de su código.

La mejor solución en su caso dependerá completamente de las circunstancias que rodean su aplicación particular.