【问题标题】:MySQL Timestamp QuestionMySQL时间戳问题
【发布时间】:2010-11-22 05:47:59
【问题描述】:

我在看一些练习题

假设您刚刚创建了这个表:


创建表时间戳测试(
ts1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
我INT
);


当您查看它的结构时,您会注意到 TIMESTAMP 列被声明为 NOT NULL。如果插入这些记录会发生什么:

mysql> INSERT INTO timestamptest SET ts1=NULL, i=10;
mysql> INSERT INTO timestamptest SET ts1=0, i=11;
mysql> INSERT INTO timestamptest SET ts1='', i=12;

答案是

只有第一个语句成功,TIMESTAMP 列设置为当前日期和时间。其他两个语句给出错误:

mysql> INSERT INTO timestamptest SET ts1=NULL, i=10;
查询正常,1 行受影响(0.00 秒)

mysql> INSERT INTO timestamptest SET ts1=0, i=11;
错误 1292 (22007):日期时间值不正确:第 1 行的列 'ts1' 为 '0'
mysql> INSERT INTO timestamptest SET ts1='', i=12;
错误 1292 (22007):不正确的日期时间值:第 1 行的列 'ts1' 的''

但是当我尝试插入 ts1=0 时,它会插入一个零值时间戳……答案是否错误?

【问题讨论】:

    标签: mysql timestamp


    【解决方案1】:

    这取决于是否设置了NO_ZERO_DATE选项:

    mysql> create table foo(x timestamp);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> set sql_mode='';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into foo values(0);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> set sql_mode='strict_all_tables,no_zero_date';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into foo values(0);
    ERROR 1292 (22007): Incorrect datetime value: '0' for column 'x' at row 1
    

    【讨论】:

      猜你喜欢
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多