diff --git a/executor/write_test.go b/executor/write_test.go index 6ee726942dd5b..7ba3a71579cc9 100644 --- a/executor/write_test.go +++ b/executor/write_test.go @@ -1680,3 +1680,11 @@ func (s *testSuite) TestRebaseIfNeeded(c *C) { tk.MustExec(`insert into t (b) values (6);`) tk.MustQuery(`select a from t where b = 6;`).Check(testkit.Rows("30003")) } + +func (s *testSuite) TestDefEnumInsert(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create table test (id int, prescription_type enum('a','b','c','d','e','f') NOT NULL, primary key(id));") + tk.MustExec("insert into test (id) values (1)") + tk.MustQuery("select prescription_type from test").Check(testkit.Rows("a")) +} diff --git a/table/column.go b/table/column.go index 628ee44a49efb..93b5ce4f78395 100644 --- a/table/column.go +++ b/table/column.go @@ -341,7 +341,11 @@ func getColDefaultValueFromNil(ctx sessionctx.Context, col *model.ColumnInfo) (t if col.Tp == mysql.TypeEnum { // For enum type, if no default value and not null is set, // the default value is the first element of the enum list - return types.NewDatum(col.FieldType.Elems[0]), nil + defEnum, err := types.ParseEnumValue(col.FieldType.Elems, 1) + if err != nil { + return types.Datum{}, err + } + return types.NewMysqlEnumDatum(defEnum), nil } if mysql.HasAutoIncrementFlag(col.Flag) { // Auto increment column doesn't has default value and we should not return error. diff --git a/table/column_test.go b/table/column_test.go index 45d2d5bdaf529..1487ddbaffbe2 100644 --- a/table/column_test.go +++ b/table/column_test.go @@ -301,7 +301,7 @@ func (t *testTableSuite) TestGetDefaultValue(c *C) { }, }, false, - types.NewStringDatum("abc"), + types.NewMysqlEnumDatum(types.Enum{Name: "abc", Value: 1}), nil, }, { diff --git a/types/datum.go b/types/datum.go index 7fd3db9531a4c..b1bb1ed02dd08 100644 --- a/types/datum.go +++ b/types/datum.go @@ -1724,6 +1724,12 @@ func NewMysqlBitDatum(b BinaryLiteral) (d Datum) { return d } +// NewMysqlEnumDatum creates a new MysqlEnum Datum for a Enum value. +func NewMysqlEnumDatum(e Enum) (d Datum) { + d.SetMysqlEnum(e) + return d +} + // MakeDatums creates datum slice from interfaces. func MakeDatums(args ...interface{}) []Datum { datums := make([]Datum, len(args))