diff --git a/parser/parser.y b/parser/parser.y index aed52660a3..9ba09fc49d 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -3868,21 +3868,25 @@ BitValueType: } StringType: - NationalOpt "CHAR" FieldLen OptBinary + NationalOpt "CHAR" FieldLen OptBinary OptCharset OptCollate { x := types.NewFieldType(mysql.TypeString) x.Flen = $3.(int) if $4.(bool) { x.Flag |= mysql.BinaryFlag } + x.Charset = $5.(string) + x.Collate = $6.(string) $$ = x } -| NationalOpt "CHAR" OptBinary +| NationalOpt "CHAR" OptBinary OptCharset OptCollate { x := types.NewFieldType(mysql.TypeString) if $3.(bool) { x.Flag |= mysql.BinaryFlag } + x.Charset = $4.(string) + x.Collate = $5.(string) $$ = x } | NationalOpt "VARCHAR" FieldLen OptBinary OptCharset OptCollate diff --git a/parser/parser_test.go b/parser/parser_test.go index 12677906ef..28fae5e330 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -442,6 +442,11 @@ func (s *testParserSuite) TestDDL(c *C) { {"CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED) // foo", true}, {"CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED) /* foo */", true}, {"CREATE TABLE foo /* foo */ (a SMALLINT UNSIGNED, b INT UNSIGNED) /* foo */", true}, + {"CREATE TABLE foo (name CHAR(50) BINARY)", true}, + {"CREATE TABLE foo (name CHAR(50) COLLATE utf8_bin)", true}, + {"CREATE TABLE foo (name CHAR(50) CHARACTER SET utf8)", true}, + {"CREATE TABLE foo (name CHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin)", true}, + {"CREATE TABLE foo (a.b, b);", false}, {"CREATE TABLE foo (a, b.c);", false}, // For table option