我们正在为我们的项目构建聊天系统。当用户创建聊天组或向组发送消息时,我们必须花费用户事件时间(以毫秒为单位)。示例数据库如下。
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可以完美工作。
答案 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');