还有一些其他问题,人们对时间戳全为零有疑问。我已经检查过了,这不是重复的。
我这样声明一个表:
CREATE TABLE `my_db`.`my_table` (
`time_stamp` timestamp NOT NULL,
`author` varchar() NOT NULL,
`text` text NOT NULL,
`md5` int(11) NOT NULL,
PRIMARY KEY (`time_stamp`)
) ;
我还有第二个表,它将时间戳作为主键,它们应该具有相同的值。
在 Delphi 中编码,我使用 SELECT CURRENT_TIMESTAMP
返回类似 '19/6/2010 4:56:17 AM'
的内容,然后我在 INSERT 语句中使用它. INSERT 成功,但时间戳全为零。
我做错了什么?
这是插入代码:
sqlCommand := 'INSERT INTO my_db.my_table(time_stamp, author, text, md5) VALUES ("'
+ timestamp +
'", "mawg", ' +
'"Hello, world"' +
0 +
'");';
Result := DoSQlCommandWithNoResultSet(sqlCommand, AdoConnection);
插入率极低,每隔几周或几个月插入一次,所以我很高兴将时间戳作为主键。我保留了事物的“版本”,所以时间戳对我来说很有意义。
我恳求认为这是一个 ADO 问题,尽管我希望 ADO 只是“通过”。我没有看到任何其他解决方案。在控制台中,输出是“正确的”,但是在 Delphi 中通过 ADO 运行时,输出是错误的
我可以向 MySQL 指定它应该如何格式化它的日期吗?
最佳答案
查看 MySQL 文档后,如果您的 timestamp
值格式不正确,通常会导致时间戳为 '0000-00-00 00:00:00'
。
在任何情况下,您都不需要指定时间戳值——这是 TIMESTAMP
优于 DATETIME
的好处。即使您这样做了,您也可以简单地将其设置为 NOW()
而不是运行不必要的 SELECT
语句。
编辑:
此外,我知道您说过您考虑周全,但您是否考虑过夏令时?当时钟在秋季拨回时,这可能会导致两条记录具有相同的时间戳。
编辑 2:
K,我不知道为什么我没有早点发现,但是你提供的时间戳格式不正确。尝试插入有效的时间戳,例如 '2010/06/19 4:56:17'
。 MySQL 对日期和时间值的解析非常宽松,但它始终必须是年-月-日和时-分-秒。
编辑 3:
好吧,这似乎有点困惑,所以我要在 DATETIME
format 上发布来自 MySQL 5.0 文档页面的引述。 :
For values specified as strings that include date part delimiters, it is not necessary to specify two digits for month or day values that are less than 10. '1979-6-9' is the same as '1979-06-09'. Similarly, for values specified as strings that include time part delimiters, it is not necessary to specify two digits for hour, minute, or second values that are less than 10. '1979-10-30 1:2:3' is the same as '1979-10-30 01:02:03'.
关于mysql - 在 MySQL 中插入时间戳值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074406/