mysql插入

oug3syen  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(311)

我们正在为我们的项目建立聊天系统。当用户创建聊天组或向组发送消息时,我们必须以毫秒为单位计算用户事件时间。下面是示例数据库。

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.000”。都是零,甚至连约会都没有。但是如果我们在insert之后编辑数据,那么当前的时间戳就完美了。

8ljdwjyq

8ljdwjyq1#

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

yws3nbqq

yws3nbqq2#

从mysql文档:
插入新行时,可以通过省略列名或将列指定为默认值来插入表达式为默认值的列的默认值(与使用文字默认值的列相同):
因此,您可以在这里选择执行一个完全不涉及列的插入,或者使用占位符来获取要启动的默认值 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');

相关问题