From 4b5d936be73195bd5b7817d383140d50b19c7f20 Mon Sep 17 00:00:00 2001 From: zhijiamu Date: Tue, 14 Jan 2025 09:34:13 +0800 Subject: [PATCH] year's precision is set to default 4 in mysql --- .../schema/mysql/MySQLNoLessThan5700SchemaAccessor.java | 8 ++++++++ .../schema/MySQLNoLessThan5700SchemaAccessorTest.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) 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