mySQL - 1067 - недопустимое значение по умолчанию для updated_at - PullRequest
0 голосов
/ 25 сентября 2018

Пытаюсь загрузить этот .sql файл, но постоянно получаю сообщение об ошибке:

1067 - Invalid default value for 'updated_at'

Я прочитал много постов, где у людей была такая же проблема.Обновление mySQL и использование timestamp, к сожалению, не вариант.

Можно ли каким-то образом переделать код, чтобы он работал с mySQL version: 5.5.16?

Я в принципе ничего не знаюmySQL, это всего лишь быстрая вещь, которую нужно загрузить.

Я на Windows, использую xampp

Вот мой код:

    -- Create syntax for TABLE 'api_news'
CREATE TABLE `api_news` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`news_title` text NOT NULL,
`news_content` text NOT NULL,
`news_image` text,
`room_id` int(11) DEFAULT NULL,
`group_id` int(11) DEFAULT NULL,
`news_hidden` enum('0','1') NOT NULL DEFAULT '0',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Create syntax for TABLE 'api_news_comments'
CREATE TABLE `api_news_comments` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`article_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`message` text NOT NULL,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'api_profile_comments'
CREATE TABLE `api_profile_comments` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`profile_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`message` text NOT NULL,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'api_room_comments'
CREATE TABLE `api_room_comments` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`room_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`message` text NOT NULL,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'api_sessions'
CREATE TABLE `api_sessions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`session` varchar(100) NOT NULL DEFAULT '',
`expires` int(11) NOT NULL DEFAULT '0',
`data` text NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `user_session` (`session`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете изменить поле на отметку времени, но вам придется самостоятельно обрабатывать обновления updated_at в коде.

Изменить:

`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

На:

`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

Другие опубликовали похожую проблему , с которой вы столкнулись в отношении версии MySQL.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...