代码之家  ›  专栏  ›  技术社区  ›  Mawg says reinstate Monica

在MySQL中插入时间戳值的问题

  •  1
  • Mawg says reinstate Monica  · 技术社区  · 14 年前

    还有一些其他的问题,人们对时间戳都是零有问题。我已经检查过了,这不是重复的。

    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语句中使用。插入成功,但时间戳全为零。

    我做错什么了?

    以下是插入代码:

      sqlCommand := 'INSERT INTO my_db.my_table(time_stamp, author, text, md5) VALUES ("' 
                       + timestamp + 
                        '", "mawg", ' +
                        '"Hello, world"' +
                        0 +
                        '");';
      Result := DoSQlCommandWithNoResultSet(sqlCommand, AdoConnection);
    

    插入率会非常低,每隔几周或几个月就有一个条目,所以我很高兴使用时间戳作为主键。我保留了事物的“版本”,所以时间戳对我来说是有意义的。

    我可以向MySQL指定日期的格式吗?

    3 回复  |  直到 12 年前
        1
  •  2
  •   Lèse majesté    14 年前

    在查看MySQL文档之后,您的 timestamp 值的格式不正确,通常会导致时间戳 '0000-00-00 00:00:00' . TIMESTAMP 结束 DATETIME . 即使你这么做了,你也可以简单地设置为 NOW() 而不是运行一个不必要的 SELECT

    编辑:

    还有,我知道你说过你想得很透彻,但是你考虑过夏令时吗?这可能会导致两个记录在秋季时钟倒转时具有相同的时间戳。

    K、 我不知道为什么我之前没听清楚,但你给出的时间戳格式不正确。尝试插入一个有效的时间戳,如 '2010/06/19 4:56:17'

    编辑3:

    好吧,这里似乎有点混乱,所以我要把MySQL5.0doc页面上的这句话贴在 DATETIME format :

    对于指定为包含日期部分分隔符的字符串的值,不必为小于10的月或日值指定两位数字。“1979-6-9”与“1979-06-09”相同。类似地,对于指定为包含时间部分分隔符的字符串的值,不必为小于10的小时、分钟或秒值指定两位数字。“1979-10-30 1:2:3”与“1979-10-30 01:02:03”相同。

        2
  •  2
  •   DrColossos    14 年前

    MySQL date functions . 它们非常广泛,允许高度的灵活性。

    除此之外,我建议您重新考虑您的表结构。timestap作为主键并不是您想要的。当你有高流量,它可能发生,时间戳是相同的。另外,如果您在行中保存2条或更多记录,则时间戳将相同。此外,MD5列被设置为int(11)。MD5散列使用混合字符,所以我宁愿使用varchar(32)。

    CREATE TABLE  `my_db`.`my_table` ( 
      `id` int(11) NOT NULL,
      `timestamp` timestamp NOT NULL,
      `author` varchar(100) NOT NULL,
      `text` text NOT NULL,
      `md5` varchar(32) NOT NULL,
    PRIMARY KEY (`id`)
    ) ;
    
        3
  •  1
  •   hudolejev    14 年前

    19/6/2010 4:56:17 AM 不是MySQL日期类型的有效日期格式。你应该把它转换成 2010-06-19 04:56:14 doc ).