sql >> Databasteknik >  >> RDS >> Mysql

Fel i MySQL vid inställning av standardvärde för DATE eller DATETIME

Felet beror på sql-läget som kan vara strikt enligt senaste MYSQL 5.7-dokumentationen

MySQL Documentation 5.7 säger :

Strikt läge påverkar om servern tillåter '0000-00-00' som ett giltigt datum:Om strikt läge inte är aktiverat är '0000-00-00' tillåtet och inlägg ger ingen varning. Om strikt läge är aktiverat, '0000- 00-00' är inte tillåtet och inlägg ger ett fel, såvida inte IGNORE anges också. För INSERT IGNORE och UPDATE IGNORE är '0000-00-00' tillåtet och inlägg ger en varning.

För att kontrollera MYSQL-läget

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

Inaktiverar STRICT_TRANS_TABLES-läget

Men för att tillåta formatet 0000-00-00 00:00:00 du måste inaktivera STRICT_TRANS_TABLES-läget i mysql-konfigurationsfilen eller genom kommando

På kommando

SET sql_mode = '';

eller

SET GLOBAL sql_mode = '';

Använder sökordet GLOBAL kräver superpreviliges och det påverkar verksamheten som alla klienter ansluter från och med den tiden

om ovanstående inte fungerar går du till /etc/mysql/my.cnf (enligt ubuntu) och kommentera STRICT_TRANS_TABLES

Om du vill ställa in sql-läget permanent vid serverstart, inkludera också SET sql_mode='' i my.cnf på Linux eller MacOS. För Windows måste detta göras i my.ini fil.

Obs

Men strikt läge är inte aktiverat som standard i MYSQL 5.6. Därför ger det inte felet enligt MYSQL 6-dokumentation som säger

MySQL tillåter dig att lagra ett "noll"-värde på '0000-00-00' som ett "dummy-datum". Detta är i vissa fall bekvämare än att använda NULL-värden och använder mindre data och indexutrymme. För att inte tillåta '0000-00-00', aktivera SQL-läget NO_ZERO_DATE.

UPPDATERA

Angående felfrågan som sagt av @Dylan-Su:

Jag tror inte att detta är felet på det sätt som MYSQL har utvecklats över tiden, vilket gör att vissa saker ändras baserat på ytterligare förbättringar av produkten.

Men jag har en annan relaterad felrapport angående NOW() funktion

Datetime-fältet accepterar inte standard NOW()

En annan användbar notering [se Automatisk initiering och uppdatering för TIMESTAMP och DATETIME ]

Från och med MySQL 5.6.5 kan TIMESTAMP och DATETIME-kolumnerna initieras automatiskt och uppdateras till aktuellt datum och tid (det vill säga den aktuella tidsstämpeln). Före 5.6.5 gäller detta endast för TIMESTAMP, och för högst en TIMESTAMP-kolumn per tabell. Följande anteckningar beskriver först automatisk initiering och uppdatering för MySQL 5.6.5 och senare, sedan skillnaderna för versioner som föregår 5.6.5.

Uppdatering angående NO_ZERO_DATE

Från och med MySQL från och med 5.7.4 är detta läge föråldrat. För tidigare version måste du kommentera ut respektive rad i inställningsfilen. Se MySQL 5.7-dokumentationen NO_ZERO_DATE



  1. ReadyCloud ReadyShipper X

  2. MySQL-strängbyte

  3. Kan inte öppna användarens standarddatabas. Inloggningen misslyckades. efter installation av SQL Server Management Studio Express

  4. JSON_QUERY() Funktion i Oracle