diff --git a/enginetest/queries/insert_queries.go b/enginetest/queries/insert_queries.go index f22f1ee157..eff5a80b2b 100644 --- a/enginetest/queries/insert_queries.go +++ b/enginetest/queries/insert_queries.go @@ -2715,6 +2715,14 @@ var InsertErrorScripts = []ScriptTest{ Query: "insert into t values ('2020-01-01 a')", ExpectedErr: sql.ErrInvalidValue, }, + { + Name: "try inserting incorrect date value", + SetUpScript: []string{ + "create table t (d date)", + }, + Query: "insert into t values ('2020-01-01 a')", + ExpectedErr: sql.ErrInvalidValue, + }, } var InsertIgnoreScripts = []ScriptTest{ diff --git a/enginetest/queries/queries.go b/enginetest/queries/queries.go index 0dfb832220..d9e025212b 100644 --- a/enginetest/queries/queries.go +++ b/enginetest/queries/queries.go @@ -4285,6 +4285,18 @@ SELECT * FROM cte WHERE d = 2;`, Query: "select cast('2020-01-01 12:34:56.123456' as datetime(6)) > cast('2020-01-01 12:34:56' as datetime)", Expected: []sql.Row{{true}}, }, + { + Query: "select cast('2020-01-01 a' as date)", + ExpectedWarning: 1292, + ExpectedWarningsCount: 1, + Expected: []sql.Row{{time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC)}}, + }, + { + Query: "select cast('2020-01-01abc123' as date)", + ExpectedWarning: 1292, + ExpectedWarningsCount: 1, + Expected: []sql.Row{{time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC)}}, + }, { Query: `SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM othertable) othertable_one) othertable_two) othertable_three WHERE s2 = 'first'`, Expected: []sql.Row{ diff --git a/sql/expression/convert.go b/sql/expression/convert.go index 9d5d7af6bd..c8466ea238 100644 --- a/sql/expression/convert.go +++ b/sql/expression/convert.go @@ -331,7 +331,10 @@ func convertValue(ctx *sql.Context, val interface{}, castTo string, originType s } d, _, err := types.Date.Convert(ctx, val) if err != nil { - return nil, err + if !sql.ErrTruncatedIncorrect.Is(err) { + return nil, err + } + ctx.Warn(mysql.ERTruncatedWrongValue, "%s", err.Error()) } return d, nil case ConvertToDatetime: