diff --git a/server/driver_tidb.go b/server/driver_tidb.go index 739e253e7422e..630f311a091fa 100644 --- a/server/driver_tidb.go +++ b/server/driver_tidb.go @@ -391,7 +391,7 @@ func convertColumnInfo(fld *ast.ResultField) (ci *ColumnInfo) { // Consider the decimal point. ci.ColumnLength++ } - } else if fld.Column.Tp != mysql.TypeBit && fld.Column.Tp != mysql.TypeTiny { + } else if types.IsString(fld.Column.Tp) { // Fix issue #4540. // The flen is a hint, not a precise value, so most client will not use the value. // But we found in rare MySQL client, like Navicat for MySQL(version before 12) will truncate diff --git a/server/driver_tidb_test.go b/server/driver_tidb_test.go index f1298e083db70..97e7b87b05040 100644 --- a/server/driver_tidb_test.go +++ b/server/driver_tidb_test.go @@ -88,4 +88,26 @@ func (ts tidbResultSetTestSuite) TestConvertColumnInfo(c *C) { } colInfo = convertColumnInfo(&resultField) c.Assert(colInfo, DeepEquals, createColumnByTypeAndLen(mysql.TypeTiny, 1)) + + resultField = ast.ResultField{ + Column: &model.ColumnInfo{ + Name: model.NewCIStr("a"), + ID: 0, + Offset: 0, + FieldType: types.FieldType{ + Tp: mysql.TypeYear, + Flag: mysql.ZerofillFlag, + Flen: 4, + Decimal: 0, + Charset: charset.CharsetBin, + Collate: charset.CollationBin, + }, + Comment: "column a is the first column in table dual", + }, + ColumnAsName: model.NewCIStr("a"), + TableAsName: model.NewCIStr("dual"), + DBName: model.NewCIStr("test"), + } + colInfo = convertColumnInfo(&resultField) + c.Assert(colInfo.ColumnLength, Equals, uint32(4)) }