diff --git a/expression/integration_test.go b/expression/integration_test.go index 4bbb12d4fa1cb..b75277d191fa3 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -2049,6 +2049,13 @@ func (s *testIntegrationSuite) TestBuiltin(c *C) { tk.MustExec(`insert into tb5 (a, b) select * from (select cast(a as json) as a1, b from tb5) as t where t.a1 = t.b;`) tk.MustExec(`drop table tb5;`) + tk.MustExec(`create table tb5(a float(64));`) + tk.MustExec(`insert into tb5(a) values (13835058055282163712);`) + err := tk.QueryToErr(`select convert(t.a1, signed int) from (select convert(a, json) as a1 from tb5) as t`) + msg := strings.Split(err.Error(), " ") + last := msg[len(msg)-1] + c.Assert(last, Equals, "bigint") + // Test corner cases of cast string as datetime result = tk.MustQuery(`select cast("170102034" as datetime);`) result.Check(testkit.Rows("2017-01-02 03:04:00")) @@ -2207,7 +2214,7 @@ func (s *testIntegrationSuite) TestBuiltin(c *C) { result.Check(testkit.Rows("99999.99")) result = tk.MustQuery("select cast(s1 as decimal(8, 2)) from t1;") result.Check(testkit.Rows("111111.00")) - _, err := tk.Exec("insert into t1 values(cast('111111.00' as decimal(7, 2)));") + _, err = tk.Exec("insert into t1 values(cast('111111.00' as decimal(7, 2)));") c.Assert(err, NotNil) result = tk.MustQuery(`select CAST(0x8fffffffffffffff as signed) a, diff --git a/types/convert.go b/types/convert.go index af512533ed0dd..8420fa680b7a0 100644 --- a/types/convert.go +++ b/types/convert.go @@ -504,10 +504,10 @@ func ConvertJSONToInt(sc *stmtctx.StatementContext, j json.BinaryJSON, unsigned if !unsigned { lBound := SignedLowerBound[mysql.TypeLonglong] uBound := SignedUpperBound[mysql.TypeLonglong] - return ConvertFloatToInt(f, lBound, uBound, mysql.TypeDouble) + return ConvertFloatToInt(f, lBound, uBound, mysql.TypeLonglong) } bound := UnsignedUpperBound[mysql.TypeLonglong] - u, err := ConvertFloatToUint(sc, f, bound, mysql.TypeDouble) + u, err := ConvertFloatToUint(sc, f, bound, mysql.TypeLonglong) return int64(u), errors.Trace(err) case json.TypeCodeString: return StrToInt(sc, hack.String(j.GetString()))