2012-08-23 50 views
1

如果我运行下面的查询:MySQL的CURRENT_TIMESTAMP给我所有0

ALTER TABLE `price_s` ADD COLUMN `ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `price_s_id` ; 

新列将与0000-00-00 00:00:00填充。 在修改该列之前,此列中的值不会更新为当前时间戳,即ON UPDATE CURRENT_TIMESTAMP似乎正常工作。

如果我运行:

SELECT version() , @@time_zone , @@system_time_zone , NOW() , UTC_TIMESTAMP() 

我:

'5.5.15', '+10:00', 'EST', '2012-08-23 14:56:59', '2012-08-23 04:56:59' 

我想UTC时间存储在列ts,我该怎么做呢?

不知道这是否是相关的,我试图生成mysql.time_zone*表:

Miranda-Macbook: ./mysql_tzinfo_to_sql /usr/share/zoneinfo | ./mysql -p -u root mysql 
Enter password: Warning: Unable to load '/usr/share/zoneinfo/+VERSION' as time zone. Skipping it. 

Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh87' as time zone. Skipping it. 
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh88' as time zone. Skipping it. 
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh89' as time zone. Skipping it. 
Warning: Unable to load '/usr/share/zoneinfo/Mideast/Riyadh87' as time zone. Skipping it. 
Warning: Unable to load '/usr/share/zoneinfo/Mideast/Riyadh88' as time zone. Skipping it. 
Warning: Unable to load '/usr/share/zoneinfo/Mideast/Riyadh89' as time zone. Skipping it. 
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it. 
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it. 

感谢@Sameer和@Marc B. 现在我明白时间戳以上(本article的帮助下) 它已经存储在UTC,所以我需要的其实是:

SET time_zone = 'SYSTEM'; 
UPDATE tablename SET ts=now() 
+3

我希望您不要指望当您添加该列时表中的现有行将获取当前时间戳。现有的行将获得值0.插入的任何新行都将具有当前的时间戳。对于现有的行,您需要运行一次性更新命令。 – Sameer

回答

2
INSERT INTO yourtable (ts) VALUES (now()) 
UPDATE yourtable SET ts=now() 

只要无论你是小号tuffing到ts字段是一个有效的mysql时间戳字符串(yyyy-mm-dd hh:mm:ss)它不关心时区是什么。这只与转换或检索有关 - mysql datefields本身没有时区的概念,它们只是某些日期/时间数据的存储库。