Грешката се дължи на sql режима, който може да бъде строг режим според най-новата документация на MYSQL 5.7
Документацията на MySQL 5.7 казва :
Строгият режим засяга дали сървърът разрешава '0000-00-00' като валидна дата:Ако строг режим не е активиран, '0000-00-00' е разрешен и вмъкванията не произвеждат предупреждение. Ако строг режим е активиран, '0000- 00-00' не е разрешено и вмъкванията произвеждат грешка, освен ако не е дадено и ИГНОРИРАНЕ. За INSERT IGNORE и UPDATE IGNORE е разрешено „0000-00-00“ и вмъкванията произвеждат предупреждение.
За да проверите режима на MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Деактивиране на режима STRICT_TRANS_TABLES
Въпреки това, за да разрешите формата 0000-00-00 00:00:00
трябва да деактивирате режима STRICT_TRANS_TABLES в конфигурационния файл на mysql или чрез команда
По команда
SET sql_mode = '';
или
SET GLOBAL sql_mode = '';
Използване на ключовата дума GLOBAL
изисква супер привилегии и засяга операциите, които всички клиенти се свързват от този момент нататък
ако по-горе не работи, отидете на /etc/mysql/my.cnf
(както според ubuntu) и коментирайте STRICT_TRANS_TABLES
Освен това, ако искате да зададете постоянно sql режима при стартиране на сървъра, включете SET sql_mode=''
в my.cnf
на Linux или MacOS. За Windows това трябва да се направи в my.ini
файл.
Забележка
Строгият режим обаче не е активиран по подразбиране в MYSQL 5.6. Следователно той не произвежда грешка според Документация на MYSQL 6 което казва
MySQL ви позволява да съхранявате „нулева“ стойност от „0000-00-00“ като „фиктивна дата“. Това в някои случаи е по-удобно от използването на NULL стойности и използва по-малко данни и индексно пространство. За да забраните '0000-00-00', активирайте SQL режима NO_ZERO_DATE.
АКТУАЛИЗИРАНЕ
Относно проблема с бъговете, както каза @Dylan-Su:
Не мисля, че това е грешката в начина, по който MYSQL се развива с течение на времето, поради което някои неща се променят въз основа на по-нататъшно подобрение на продукта.
Имам обаче друг свързан доклад за грешка относно NOW()
функция
Полето за дата и час не приема по подразбиране СЕГА()
Още една полезна бележка [вижте Автоматично инициализиране и актуализиране за TIMESTAMP и DATETIME ]
От MySQL 5.6.5 колоните TIMESTAMP и DATETIME могат да бъдат автоматично инициализирани и актуализирани до текущата дата и час (тоест текущото времеви печат). Преди 5.6.5 това е вярно само за TIMESTAMP и за най-много една колона TIMESTAMP на таблица. Следващите бележки първо описват автоматичната инициализация и актуализиране за MySQL 5.6.5 и по-нова версия, след това разликите за версиите, предшестващи 5.6.5.
Актуализация относно NO_ZERO_DATE
От MySQL от 5.7.4 този режим е остарял. За предишна версия трябва да коментирате съответния ред в конфигурационния файл. Вижте документацията за MySQL 5.7 на NO_ZERO_DATE