diff options
-rw-r--r-- | mysql-test/r/type_float.result | 7 | ||||
-rw-r--r-- | mysql-test/t/type_float.test | 7 | ||||
-rw-r--r-- | sql/field_conv.cc | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/mysql-test/r/type_float.result b/mysql-test/r/type_float.result index 530eb32f77d..6e8275d5dac 100644 --- a/mysql-test/r/type_float.result +++ b/mysql-test/r/type_float.result @@ -179,6 +179,13 @@ f 9.999 9.999 drop table if exists t1; +create table t1 (d1 double, d2 double unsigned); +insert into t1 set d1 = -1.0; +update t1 set d2 = d1; +select * from t1; +d1 d2 +-1 0 +drop table t1; create table t1 (c char(20)); insert into t1 values (5e-28); select * from t1; diff --git a/mysql-test/t/type_float.test b/mysql-test/t/type_float.test index 69cdeaa32a9..5b106d242de 100644 --- a/mysql-test/t/type_float.test +++ b/mysql-test/t/type_float.test @@ -93,6 +93,13 @@ create table t1 (f float(54)); # Should give an error drop table if exists t1; --enable_warnings +# Don't allow 'double unsigned' to be set to a negative value (Bug #7700) +create table t1 (d1 double, d2 double unsigned); +insert into t1 set d1 = -1.0; +update t1 set d2 = d1; +select * from t1; +drop table t1; + # Ensure that maximum values as the result of number of decimals # being specified in table schema are enforced (Bug #7361) create table t1 (f float(4,3)); diff --git a/sql/field_conv.cc b/sql/field_conv.cc index 61a5a28f47b..8b362bbf807 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -559,6 +559,7 @@ void field_conv(Field *to,Field *from) if (to->real_type() == from->real_type()) { if (to->pack_length() == from->pack_length() && + !(to->flags & UNSIGNED_FLAG && !(from->flags & UNSIGNED_FLAG)) && to->real_type() != FIELD_TYPE_ENUM && to->real_type() != FIELD_TYPE_SET && from->charset() == to->charset() && |