MariaDB从10.2.13升级到10.6.11后DATETIME类型报错如何解决?
MariaDB从10.2.13升级到10.6.11后DATETIME类型识别错误求助
将MariaDB版本从10.2.13-MariaDB升级至10.6.11-MariaDB后,执行作业时出现以下错误:
Error Code :- 100.123 Error Message :- Invalid DB type - DATETIME /* MARIADB-5.3 */ [2023-07-04 16:38:46,010InputMonitorTask] FATAL- Exception while monitoring database : com.suntecgroup.orm.exceptions.RDBMSORMException: Error Context :- JavaDBMapping.getJavaDBType Error Code :- 100.123 Error Message :- Invalid DB type - DATETIME /* MARIADB-5.3 */ at com.suntecgroup.orm.tools.JavaDBMapping.getJavaDBType(JavaDBMapping.java:167) at com.suntecgroup.tbms.tpe.io.IOUtility.getFieldDataType(IOUtility.java:5082) at com.suntecgroup.tbms.tpe.io.IOUtility.validateDetails(IOUtility.java:4805) at com.suntecgroup.tbms.tpe.io.IOUtility.validateInputTableDefnConfig(IOUtility.java:4615) at com.suntecgroup.tbms.tpe.io.monitors.DataBaseMonitor.monitorEvent(DataBaseMonitor.java:284) at com.suntecgroup.tbms.tpe.core.tasks.InputMonitorTask.executeTask(InputMonitorTask.java:318) at com.suntecgroup.tbms.tpe.core.tasks.InterruptableTask.run(InterruptableTask.java:131)
已尝试的无效方案
- 在
my.cnf中添加STRICT_TRANS_TABLES,NO_ZERO_DATE,配置为:sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ZERO_DATE' - 在数据库连接URL中添加
useMysqlMetadata=true - 更新
java_db_mapping表的db_type列为TimeStamp
可行解决思路
修复ORM类型映射逻辑
错误根源是JavaDBMapping.getJavaDBType方法无法识别带版本注释的DATETIME /* MARIADB-5.3 */类型。需修改该方法,在解析数据库类型时去除/*及之后的注释内容,仅保留DATETIME核心类型进行匹配。调整JDBC驱动元数据获取方式
在连接URL中添加useOldAliasMetadataBehavior=true参数,让驱动以旧格式返回元数据,避免带上版本注释;或尝试useInformationSchema=true,强制驱动通过INFORMATION_SCHEMA获取表结构,绕过数据库内部的元数据格式差异。升级适配的JDBC驱动
更换为适配MariaDB 10.6版本的最新稳定JDBC驱动(如3.0.0+版本),旧版本驱动可能对新版本返回的类型注释处理存在兼容问题。手动移除字段类型注释
若涉及表数量较少,可直接修改表结构移除注释,执行SQL:ALTER TABLE 目标表名 MODIFY COLUMN 目标字段名 DATETIME;
内容的提问来源于stack exchange,提问作者shrinivas shri
相关产品推荐
相关产品推荐

