3

Я экспортировал SQL-скрипт с верстаком в phpMyAdmin, и я получил ошибку из-за значения по умолчанию TIMESTAMP.Ошибка значения по умолчанию TIMESTAMP

Вот кусок кода:

CREATE TABLE IF NOT EXISTS `test`.`is_users` (
    `count` INT(10) UNIQUE NOT NULL AUTO_INCREMENT, 
    `active` ENUM('1', '0') NULL DEFAULT 1, 
    `id` VARCHAR(36) UNIQUE NOT NULL, 
    `created_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01', 
    `updated_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01', 
    `deleted_at` TIMESTAMP NULL DEFAULT NULL, 

И я получаю ошибку:

# 1067 - недопустимое значение по умолчанию для 'created_at'

Чтобы избежать ошибки, дата по умолчанию должна быть, например, 1970-01-01 01:01:01, это означает, что не может быть нулей. Как я мог исправить это? Спасибо.

ответ

1

Попробуйте

SELECT FROM_UNIXTIME(1); 

Если ваша система работает в другом часовом поясе, чем UTC, то вы не получите «1970-01-01 00:00:01», как результат. Например, моя система работает в CET, результатом которой является «1970-01-01 01:00:01». Поэтому этот результат должен работать как значение по умолчанию для вашей таблицы.

0

On 5.7, вы хотите отключить TRADITIONAL в sql_mode для того, чтобы быть в состоянии поддерживать '0000-00-00 00:00:00' в DateTime и метки времени, или 0s в как вам нужно. Например, по умолчанию в 5.7.10, SQL MODES являются:

mysql> SELECT @@sql_mode; 
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| @@sql_mode                                        | 
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | 
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

Это можно сделать либо заходящего sql_mode в файле my.cf или командой строки следующим образом:

SET sql_mode='ALLOW_INVALID_DATES'; 

Вы можете хотите сохранить некоторые другие режимы, и вы должны посмотреть на документацию, связанную выше. Это довольно сложно, поскольку некоторые режимы зависят от других.

Смежные вопросы