Loading mysql-test/r/type_date.result +8 −0 Original line number Diff line number Diff line Loading @@ -96,3 +96,11 @@ f2 19781126 19781126 DROP TABLE t1, t2, t3; CREATE TABLE t1 (y YEAR); INSERT INTO t1 VALUES ('abc'); Warnings: Warning 1265 Data truncated for column 'y' at row 1 SELECT * FROM t1; y 0000 DROP TABLE t1; mysql-test/t/type_date.test +7 −0 Original line number Diff line number Diff line Loading @@ -107,3 +107,10 @@ SELECT * FROM t2; SELECT * FROM t3; DROP TABLE t1, t2, t3; # Test that setting YEAR to invalid string results in default value, not # 2000. (Bug #6067) CREATE TABLE t1 (y YEAR); INSERT INTO t1 VALUES ('abc'); SELECT * FROM t1; DROP TABLE t1; sql/field.cc +10 −2 Original line number Diff line number Diff line Loading @@ -3512,9 +3512,17 @@ void Field_time::sql_type(String &res) const int Field_year::store(const char *from, uint len,CHARSET_INFO *cs) { int not_used; // We can ignore result from str2int int err; char *end; long nr= my_strntol(cs, from, len, 10, &end, ¬_used); long nr= my_strntol(cs, from, len, 10, &end, &err); if (err) { if (table->in_use->count_cuted_fields) set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); *ptr= 0; return 0; } if (nr < 0 || nr >= 100 && nr <= 1900 || nr > 2155) { Loading Loading
mysql-test/r/type_date.result +8 −0 Original line number Diff line number Diff line Loading @@ -96,3 +96,11 @@ f2 19781126 19781126 DROP TABLE t1, t2, t3; CREATE TABLE t1 (y YEAR); INSERT INTO t1 VALUES ('abc'); Warnings: Warning 1265 Data truncated for column 'y' at row 1 SELECT * FROM t1; y 0000 DROP TABLE t1;
mysql-test/t/type_date.test +7 −0 Original line number Diff line number Diff line Loading @@ -107,3 +107,10 @@ SELECT * FROM t2; SELECT * FROM t3; DROP TABLE t1, t2, t3; # Test that setting YEAR to invalid string results in default value, not # 2000. (Bug #6067) CREATE TABLE t1 (y YEAR); INSERT INTO t1 VALUES ('abc'); SELECT * FROM t1; DROP TABLE t1;
sql/field.cc +10 −2 Original line number Diff line number Diff line Loading @@ -3512,9 +3512,17 @@ void Field_time::sql_type(String &res) const int Field_year::store(const char *from, uint len,CHARSET_INFO *cs) { int not_used; // We can ignore result from str2int int err; char *end; long nr= my_strntol(cs, from, len, 10, &end, ¬_used); long nr= my_strntol(cs, from, len, 10, &end, &err); if (err) { if (table->in_use->count_cuted_fields) set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); *ptr= 0; return 0; } if (nr < 0 || nr >= 100 && nr <= 1900 || nr > 2155) { Loading