From 6f2c7111c4d39eb2e8ff280eea068ef74b31879b Mon Sep 17 00:00:00 2001 From: winkyao Date: Tue, 6 Nov 2018 15:34:42 +0800 Subject: [PATCH] [parser] *: change default charset from utf8 to utf8mb4 (#13) --- parser/charset/charset.go | 5 +++++ parser/mysql/charset.go | 16 +++++++++------- parser/parser.go | 8 ++++---- parser/parser.y | 8 ++++---- parser/types/field_type.go | 2 +- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/parser/charset/charset.go b/parser/charset/charset.go index 0511f554019e0..c42c13e4b09fc 100644 --- a/parser/charset/charset.go +++ b/parser/charset/charset.go @@ -115,6 +115,11 @@ func GetDefaultCollation(charset string) (string, error) { return c.DefaultCollation, nil } +// GetDefaultCharsetAndCollate returns the default charset and collation. +func GetDefaultCharsetAndCollate() (string, string) { + return mysql.DefaultCharset, mysql.DefaultCollationName +} + // GetCharsetInfo returns charset and collation for cs as name. func GetCharsetInfo(cs string) (string, string, error) { c, ok := charsets[strings.ToLower(cs)] diff --git a/parser/mysql/charset.go b/parser/mysql/charset.go index 9cd96796efc71..f2e99a43765ef 100644 --- a/parser/mysql/charset.go +++ b/parser/mysql/charset.go @@ -551,13 +551,15 @@ var CollationNames = map[string]uint8{ // MySQL collation information. const ( - UTF8Charset = "utf8" - UTF8MB4Charset = "utf8mb4" - DefaultCharset = UTF8Charset - DefaultCollationID = 83 - BinaryCollationID = 63 - UTF8DefaultCollation = "utf8_bin" - DefaultCollationName = UTF8DefaultCollation + UTF8Charset = "utf8" + UTF8MB4Charset = "utf8mb4" + DefaultCharset = UTF8MB4Charset + // DefaultCollationID is utf8mb4_bin(46) + DefaultCollationID = 46 + BinaryCollationID = 63 + UTF8DefaultCollation = "utf8_bin" + UTF8MB4DefaultCollation = "utf8mb4_bin" + DefaultCollationName = UTF8MB4DefaultCollation // MaxBytesOfCharacter, is the max bytes length of a character, // refer to RFC3629, in UTF-8, characters from the U+0000..U+10FFFF range diff --git a/parser/parser.go b/parser/parser.go index 0165e213cdf16..5edb3b48c28a8 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -9110,8 +9110,8 @@ yynewstate: x.Flag |= mysql.BinaryFlag } if x.Charset == "" { - x.Charset = charset.CharsetUTF8 - x.Collate = charset.CollationUTF8 + x.Charset = mysql.DefaultCharset + x.Collate = mysql.DefaultCollationName } parser.yyVAL.item = x } @@ -9180,8 +9180,8 @@ yynewstate: { x := types.NewFieldType(mysql.TypeJSON) x.Flag |= mysql.BinaryFlag | (mysql.ParseToJSONFlag) - x.Charset = charset.CharsetUTF8 - x.Collate = charset.CollationUTF8 + x.Charset = mysql.DefaultCharset + x.Collate = mysql.DefaultCollationName parser.yyVAL.item = x } case 815: diff --git a/parser/parser.y b/parser/parser.y index 45fe6bc1dbcce..ade1d3d97ce15 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -4072,8 +4072,8 @@ CastType: x.Flag |= mysql.BinaryFlag } if x.Charset == "" { - x.Charset = charset.CharsetUTF8 - x.Collate = charset.CollationUTF8 + x.Charset = mysql.DefaultCharset + x.Collate = mysql.DefaultCollationName } $$ = x } @@ -4142,8 +4142,8 @@ CastType: { x := types.NewFieldType(mysql.TypeJSON) x.Flag |= mysql.BinaryFlag | (mysql.ParseToJSONFlag) - x.Charset = charset.CharsetUTF8 - x.Collate = charset.CollationUTF8 + x.Charset = mysql.DefaultCharset + x.Collate = mysql.DefaultCollationName $$ = x } diff --git a/parser/types/field_type.go b/parser/types/field_type.go index 4b299cdb63eda..af2a2b29184be 100644 --- a/parser/types/field_type.go +++ b/parser/types/field_type.go @@ -204,7 +204,7 @@ func (ft *FieldType) FormatAsCastType(w io.Writer) { if ft.Flag&mysql.BinaryFlag != 0 { fmt.Fprint(w, " BINARY") } - if ft.Charset != charset.CharsetBin && ft.Charset != charset.CharsetUTF8 { + if ft.Charset != charset.CharsetBin && ft.Charset != mysql.DefaultCharset { fmt.Fprintf(w, " %s", ft.Charset) } case mysql.TypeDate: