{"id":622,"date":"2013-01-09T23:57:51","date_gmt":"2013-01-10T04:57:51","guid":{"rendered":"http:\/\/www.latindevelopers.com\/ivancp\/?p=622"},"modified":"2013-01-10T10:57:03","modified_gmt":"2013-01-10T15:57:03","slug":"mysql-el-extrano-caso-de-un-campo-timestamp","status":"publish","type":"post","link":"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/","title":{"rendered":"MySQL, el extra\u00f1o caso de un campo timestamp"},"content":{"rendered":"<p>Hace un tiempo descubr\u00ed una caracter\u00edstica (tal vez sea un bug) sobre los campos timestamp de MySQL. Es probable que este documentado en alguna parte que todav\u00eda no he le\u00eddo:<\/p>\n<p>Cuando se a\u00f1ade un campo timestamp a una tabla, MySQL agrega m\u00e1gicamente algunas caracter\u00edsticas al nuevo campo creado como un \u00abtrigger\u00bb y la fecha actual como valor por defecto.<\/p>\n<p>Aqu\u00ed esta el script donde se produce el caso:<\/p>\n<pre lang=\"sql\">\r\n-- CREANDO UNA TABLA CUALQUIERA E INSERTANDO DATOS \r\nmysql> create table t(\r\n    -> id int not null primary key auto_increment,\r\n    -> val varchar(50)\r\n    -> );\r\nQuery OK, 0 rows affected (0.15 sec)\r\n\r\nmysql> insert into t (val) values (\"foo\") ,(\"var\");\r\nQuery OK, 2 rows affected (0.08 sec)\r\nRecords: 2  Duplicates: 0  Warnings: 0\r\n\r\nmysql> select * from t;\r\n+----+------+\r\n| id | val  |\r\n+----+------+\r\n|  1 | foo  |\r\n|  2 | var  |\r\n+----+------+\r\n2 rows in set (0.00 sec)\r\n\r\n\r\n-- AGREGANDO UN CAMPO TIMESTAMP Y MAS DATOS\r\nmysql> alter table t add ts_field timestamp;\r\nQuery OK, 2 rows affected (0.35 sec)\r\nRecords: 2  Duplicates: 0  Warnings: 0\r\n\r\nmysql> insert into t (val) values (\"foo 2\") ,(\"var 2\");\r\nQuery OK, 2 rows affected (0.06 sec)\r\nRecords: 2  Duplicates: 0  Warnings: 0\r\n\r\n-- HE AQUI LA MAGIA:\r\nmysql> select * from t;\r\n+----+-------+---------------------+\r\n| id | val   | ts_field            |\r\n+----+-------+---------------------+\r\n|  1 | foo   | 0000-00-00 00:00:00 |\r\n|  2 | var   | 0000-00-00 00:00:00 |\r\n|  3 | foo 2 | 2013-01-09 23:20:01 |    <---\r\n|  4 | var 2 | 2013-01-09 23:20:01 |    <---\r\n+----+-------+---------------------+\r\n4 rows in set (0.00 sec)\r\n<\/pre>\n<p>\u00bf\u00a1Pero que acaba de pasar!?<br \/>\nno lo s\u00e9.<\/p>\n<p>La nueva estructura de la tabla es:<\/p>\n<pre lang=\"text\">\r\nCREATE TABLE `t` (\r\n  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n  `val` varchar(50) DEFAULT NULL,\r\n  `ts_field` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\r\n  PRIMARY KEY (`id`)\r\n) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1\r\n<\/pre>\n<p>Esto s\u00f3lo pasa cuando en la tabla no existe otro campo timestamp a\u00fan.<\/p>\n<p>Ahora, es \u00fatil? tal vez. Es un BUG? tal vez.<\/p>\n<p>El \"extra\u00f1o caso\" se repite en MySQL 5.1 y 5.5.<\/p>\n<p><strong>Update<\/strong>: Es una caracter\u00edstica documentada en https:\/\/dev.mysql.com\/doc\/refman\/5.5\/en\/timestamp-initialization.html , me disculpo por el post que finalmente result\u00f3 ser una chorrada, un lapsus, un horror.<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Compartelo:<\/h3><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-622\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=facebook\" target=\"_blank\" title=\"Haz clic para compartir en Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-622\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=twitter\" target=\"_blank\" title=\"Haz clic para compartir en Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>M\u00e1s<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-email\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-email sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=email\" target=\"_blank\" title=\"Haz clic para enviar por correo electr\u00f3nico a un amigo\"><span>Correo electr\u00f3nico<\/span><\/a><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/\" target=\"_blank\" title=\"Haz clic para imprimir\"><span>Imprimir<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-linkedin\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-linkedin-622\" class=\"share-linkedin sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=linkedin\" target=\"_blank\" title=\"Haz clic para compartir en LinkedIn\"><span>LinkedIn<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Hace un tiempo descubr\u00ed una caracter\u00edstica (tal vez sea un bug) sobre los campos timestamp de MySQL. Es probable que este documentado en alguna parte que todav\u00eda no he le\u00eddo: Cuando se a\u00f1ade un campo timestamp a una tabla, MySQL &hellip; <a href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Compartelo:<\/h3><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-622\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=facebook\" target=\"_blank\" title=\"Haz clic para compartir en Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-622\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=twitter\" target=\"_blank\" title=\"Haz clic para compartir en Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>M\u00e1s<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-email\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-email sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=email\" target=\"_blank\" title=\"Haz clic para enviar por correo electr\u00f3nico a un amigo\"><span>Correo electr\u00f3nico<\/span><\/a><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/\" target=\"_blank\" title=\"Haz clic para imprimir\"><span>Imprimir<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-linkedin\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-linkedin-622\" class=\"share-linkedin sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/01\/mysql-el-extrano-caso-de-un-campo-timestamp\/?share=linkedin\" target=\"_blank\" title=\"Haz clic para compartir en LinkedIn\"><span>LinkedIn<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":249,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[7],"tags":[12,30],"jetpack_featured_media_url":"https:\/\/www.latindevelopers.com\/ivancp\/wp-content\/uploads\/logo-mysql-170x115-e1302270861102.png","jetpack_shortlink":"https:\/\/wp.me\/p1tEO5-a2","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts\/622"}],"collection":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/comments?post=622"}],"version-history":[{"count":5,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts\/622\/revisions"}],"predecessor-version":[{"id":626,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts\/622\/revisions\/626"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/media\/249"}],"wp:attachment":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/media?parent=622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/categories?post=622"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/tags?post=622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}