diff --git a/dumpling/v4/export/sql.go b/dumpling/v4/export/sql.go index 78c86526..75ffce46 100644 --- a/dumpling/v4/export/sql.go +++ b/dumpling/v4/export/sql.go @@ -514,8 +514,20 @@ func isUnknownSystemVariableErr(err error) bool { func resetDBWithSessionParams(tctx *tcontext.Context, db *sql.DB, dsn string, params map[string]interface{}) (*sql.DB, error) { support := make(map[string]interface{}) for k, v := range params { + var pv interface{} + if str, ok := v.(string); ok { + if pvi, err := strconv.ParseInt(str, 10, 64); err == nil { + pv = pvi + } else if pvf, err := strconv.ParseFloat(str, 64); err == nil { + pv = pvf + } else { + pv = str + } + } else { + pv = v + } s := fmt.Sprintf("SET SESSION %s = ?", k) - _, err := db.ExecContext(tctx, s, v) + _, err := db.ExecContext(tctx, s, pv) if err != nil { if isUnknownSystemVariableErr(err) { tctx.L().Info("session variable is not supported by db", zap.String("variable", k), zap.Reflect("value", v)) @@ -524,7 +536,7 @@ func resetDBWithSessionParams(tctx *tcontext.Context, db *sql.DB, dsn string, pa return nil, errors.Trace(err) } - support[k] = v + support[k] = pv } for k, v := range support {