MySQL插入与毫秒

时间:2018-08-06 06:39:11

标签: mysql mysqli

我们正在为我们的项目构建聊天系统。当用户创建聊天组或向组发送消息时,我们必须花费用户事件时间(以毫秒为单位)。示例数据库如下。

CREATE TABLE `chats` (
  `id` int(11) NOT NULL,
  `chat_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `status` float NOT NULL DEFAULT '1',
  `chat_user` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `user_type` varchar(11) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'users',
  `last_seen` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `delete_date` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `update_date` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  `create_date` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

问题是,当我们向表中插入新数据时,mysql将当前时间设为“ 0000-00-00 00:00:00.000”。全为零,甚至没有日期。但是,如果我们在插入后编辑该数据,那么current_timestamp可以完美工作。

2 个答案:

答案 0 :(得分:0)

$ timestamp = round(microtime(true)* 1000); 将$ timestamp变量值存储在数据库列中。这是基于utc的时间戳,您也可以轻松地将其转换为本地时间。

答案 1 :(得分:0)

从MySQL documentation

  

插入新行时,可以通过省略列名或将列指定为DEFAULT来插入具有表达式默认值的列的默认值(就像具有文字默认值的列一样):

因此,您在此处获得默认值的选项是执行根本不提及该列的插入操作,或使用占位符DEFAULT。以下两个都应产生相同的结果:

INSERT INTO chats (id, chat_id, status, chat_user, user_type, last_seen, delete_date,
    update_date, create_date)
VALUES
    (1, 1, 1.0, 'tim', 'admin', DEFAULT, DEFAULT, DEFAULT, DEFAULT);

INSERT INTO chats (id, chat_id, status, chat_user, user_type)
VALUES
    (1, 1, 1.0, 'tim', 'admin');