diff --git a/libs/db-browser/src/main/java/com/oceanbase/tools/dbbrowser/schema/mysql/MySQLNoLessThan5700SchemaAccessor.java b/libs/db-browser/src/main/java/com/oceanbase/tools/dbbrowser/schema/mysql/MySQLNoLessThan5700SchemaAccessor.java index 5fc03fca41..e9b8af2566 100644 --- a/libs/db-browser/src/main/java/com/oceanbase/tools/dbbrowser/schema/mysql/MySQLNoLessThan5700SchemaAccessor.java +++ b/libs/db-browser/src/main/java/com/oceanbase/tools/dbbrowser/schema/mysql/MySQLNoLessThan5700SchemaAccessor.java @@ -121,6 +121,7 @@ public class MySQLNoLessThan5700SchemaAccessor implements DBSchemaAccessor { SPECIAL_TYPE_NAMES.add("bigint"); SPECIAL_TYPE_NAMES.add("float"); SPECIAL_TYPE_NAMES.add("double"); + SPECIAL_TYPE_NAMES.add("year"); } public MySQLNoLessThan5700SchemaAccessor(@NonNull JdbcOperations jdbcOperations) { @@ -605,6 +606,13 @@ protected RowMapper listTableRowMapper() { protected void fillPrecisionAndScale(DBTableColumn column) { String typeName = column.getTypeName(); + /* + In higher mysql version(from 5.7.5),Year's precision is set to default 4 in ddl sql and table construction compare, + especially when columntype=yaer(2),the year's precision will be set 2 + */ + if ("year".equalsIgnoreCase(typeName)) { + column.setPrecision(4L); + } if (SPECIAL_TYPE_NAMES.contains(Objects.isNull(typeName) ? null : typeName.toLowerCase())) { String precisionAndScale = DBSchemaAccessorUtil.parsePrecisionAndScale(column.getFullTypeName()); if (StringUtils.isBlank(precisionAndScale)) { diff --git a/libs/db-browser/src/test/java/com/oceanbase/tools/dbbrowser/schema/MySQLNoLessThan5700SchemaAccessorTest.java b/libs/db-browser/src/test/java/com/oceanbase/tools/dbbrowser/schema/MySQLNoLessThan5700SchemaAccessorTest.java index a16993c6a0..b5300829b1 100644 --- a/libs/db-browser/src/test/java/com/oceanbase/tools/dbbrowser/schema/MySQLNoLessThan5700SchemaAccessorTest.java +++ b/libs/db-browser/src/test/java/com/oceanbase/tools/dbbrowser/schema/MySQLNoLessThan5700SchemaAccessorTest.java @@ -373,7 +373,7 @@ private static void initVerifyDataTypes() { DataType.of("col24", "time", 0, 0L, 0, null), DataType.of("col25", "date", 0, null, 0, null), DataType.of("col26", "datetime", 0, 0L, 0, null), - DataType.of("col27", "year", 0, 0L, 0, null))); + DataType.of("col27", "year", 4, 4L, 0, null))); } @Data