Почему CURRENT_TIMESTAMP не будет работать в mysqlworkbench?

#mysql #debugging #mysql-workbench

#mysql #отладка #mysql-workbench

Вопрос:

Я хочу получить текущее время создания и обновления записи. В руководстве, которому я следую, автор использует CURRENT_TIMESTAMP без () , но у меня это не сработало, это дало мне std::exception .

Ниже я делаю CURRENT_TIMESTAMP() , но это не работает. Я также читал онлайн и пробовал DEFAULT CURRENT_TIMESTAMP , но это также не работает.

Что я делаю не так и как я могу это исправить?

введите описание изображения здесь

 public function up()
{
    Schema::create('blogs', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->text('body');
        $table->timestamps();
    });
}
  

Комментарии:

1. Каков тип данных created_at и updated_at ?

2. @Zendy Я использую Laravel. Я только что опубликовал фрагмент кода, который отображает типы данных.

3. Для меня выглядит нормально. Не могли бы вы также опубликовать свой SQL-запрос для получения post?

4. @Zendy SELECT * FROM tutorialreact.blogs;

5. Я не вижу ничего, связанного с CURRENT_TIMESTAMP , в вашем определении таблицы или запросе. Не могли бы вы отредактировать вопрос, описав пошагово то, что вы пытаетесь сделать? Ссылка на руководство поможет.

Ответ №1:

Проблема в том, что вы пытались вставить CURRENT_TIMESTAMP из ввода GUI, который неверен, потому что он пытается проанализировать его как строку на сегодняшний день.

Я предлагаю вам вместо этого вставить его в SQL-запрос.

 INSERT INTO blogs 
    (id, name, body, created_at, updated_at) 
VALUES 
    (null, 'this is name', 'this is body', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()) 
  

Ответ №2:

В руководстве, которому я следую, автор использует CURRENT_TIMESTAMP без ()

Основываясь на ваших результатах и на нескольких обоснованных предположениях, касающихся того, что происходит в этом видеоклипе, это, по-видимому, является особенностью Sequel Pro, клиента базы данных, который использует ведущий учебного пособия, а не самой базы данных MySQL. И вместо Sequel Pro вы используете MySQL Workbench, совершенно другую часть программного обеспечения.

Функция MySQL с очень похожим именем действительно является вызовом функции с () после нее, так что это что-то другое.

но у меня это не сработало, это дало мне std:: exception.

Для меня этот конкретный симптом звучит как ошибка, хотя нет реальной причины ожидать, что Workbench примет значение без даты (или даже произвольное выражение) в поле даты / времени.

Просто невозможно принимать такие входные данные однозначно, без использования таких приятных вещей, как кавычки и разделители имен полей, которые вы получаете, написав полную INSERT инструкцию самостоятельно, минуя виджеты Workbench. Это понадобится вам для хорошего решения Zendy по использованию вместо этого функции MySQL CURRENT_TIMESTAMP() .

Ниже я выполняю CURRENT_TIMESTAMP(), но это не работает. Я также читал онлайн и пробовал использовать CURRENT_TIMESTAMP по УМОЛЧАНИЮ, но это также не работает.

Вероятно, это ограничения интерфейса Workbench. Он пытается решить, предоставляете ли вы ему дословные строки для хранения в таблице или выражения с вызовами функций. И, справедливости ради, опять же, у него недостаточно информации, чтобы определить это со 100% уверенностью.

Вот почему создание собственных инструкций SQL обычно лучше. Это единственный способ конкретно указать, что именно вы пытаетесь сделать.