Mysql Вставка с миллисекундами

0

Мы создаем систему чата для нашего проекта. Когда пользователь создает чат-группу или отправляет сообщение группе, мы должны принимать время события пользователя с помощью milisecond. Ниже приведен пример базы данных.

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
    Только что попробовал вставить на SQLFiddle, и он работает нормально.
Показать ещё 1 комментарий
Теги:
mysqli

2 ответа

0
Лучший ответ

Из документации MySQL:

При вставке новой строки значение по умолчанию для столбца с выражением по умолчанию можно вставить либо без имени столбца, либо путем указания столбца как 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');
0

$ timestamp = round (microtime (true) * 1000); введите значение переменной timestamp $ в столбце базы данных. Это временная метка, основанная на utc, и вы можете легко преобразовать ее в локальное время.

  • 0
    Я нигде не вижу, чтобы OP упоминал об использовании PHP
  • 0
    Это может быть решением проблемы, но я ищу более плавное решение. Было бы намного лучше, если бы я мог справиться с этой проблемой в процессе добавления данных в базу данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню