diff --git a/sql/mysql/inspect.go b/sql/mysql/inspect.go index 7f68fc84720..00c58832a37 100644 --- a/sql/mysql/inspect.go +++ b/sql/mysql/inspect.go @@ -237,7 +237,7 @@ func (i *inspect) addColumn(s *schema.Schema, rows *sql.Rows) error { if err := i.extraAttr(t, c, extra.String); err != nil { return err } - if sqlx.ValidString(defaults) { + if defaults.Valid { if i.mariadb() { c.Default = i.marDefaultExpr(c, defaults.String) } else { @@ -573,6 +573,10 @@ func isHex(x string) bool { return len(x) > 2 && strings.ToLower(x[:2]) == "0x" // marDefaultExpr returns the correct schema.Expr based on the column attributes for MariaDB. func (i *inspect) marDefaultExpr(c *schema.Column, x string) schema.Expr { + // Unlike MySQL, NULL means default to NULL or no default. + if x == "NULL" { + return nil + } // From MariaDB 10.2.7, string-based literals are quoted to distinguish them from expressions. if i.gteV("10.2.7") && sqlx.IsQuoted(x, '\'') { return &schema.Literal{V: x} diff --git a/sql/postgres/inspect.go b/sql/postgres/inspect.go index b4096698bf3..afe488e0c27 100644 --- a/sql/postgres/inspect.go +++ b/sql/postgres/inspect.go @@ -178,7 +178,7 @@ func (i *inspect) addColumn(s *schema.Schema, rows *sql.Rows) error { typtype: typtype.String, typid: typid.Int64, }) - if sqlx.ValidString(defaults) { + if defaults.Valid { c.Default = defaultExpr(c, defaults.String) } if identity.String == "YES" { diff --git a/sql/sqlite/inspect.go b/sql/sqlite/inspect.go index 69c1f781930..6f599a3862e 100644 --- a/sql/sqlite/inspect.go +++ b/sql/sqlite/inspect.go @@ -138,7 +138,7 @@ func (i *inspect) addColumn(t *schema.Table, rows *sql.Rows) error { if err != nil { return err } - if sqlx.ValidString(defaults) { + if defaults.Valid { c.Default = defaultExpr(defaults.String) } // TODO(a8m): extract collation from 'CREATE TABLE' statement.