H2 迁移到 MySQL 问题

H2 迁移到 MySQL 问题汇总

介绍

项目中,需要将数据库由 H2 迁移到 mariadb-5.5.60,迁移过程中遇到的问题汇总如下

表名大小写敏感问题

在 linux 系统中,mysql/mariadb 对表名的大小写是敏感的,因为在 SQL 语句中,使用大写的表名,在 H2 中正常,但是迁移到 mariadb 后,提示找不到表。

解决:将 SQL 语句中的表名改为小写

DATE_FORMAT() 函数问题

在 H2 的 SQL 语句中,使用了 FORMATDATETIME(create_time, 'yyyy-MM-dd HH:') 对日期进行格式化处理,转为 mariadb 后,mariadb 不支持 FORMATDATETIME() 函数,所以使用了 DATE_FORMAT() 函数代替,但是,执行 sql 后发现查不到期望的数据。

测试: 在 H2 控制台执行

1
select FORMATDATETIME('2023-08-09 11:06:57', 'yyyy-MM-dd HH:')

可以得到 2023-08-09 11:

在 mariadb 控制台执行

1
select DATE_FORMAT('2023-08-09 11:06:57', 'yyyy-MM-dd HH:');

得到 yyyy-MM-dd HH:

参考:
https://www.w3school.com.cn/sql/func_date_format.asp

DATE_FORMAT() 函数的格式化参数和 FORMATDATETIME() 函数不同,将 SQL 修改为 DATE_FORMAT(create_time, '%Y-%m-%d %H:') 后,可以查到正确的数据。

在 mariadb 控制台执行

1
select DATE_FORMAT('2023-08-09 11:06:57', '%Y-%m-%d %H:');

得到正确的结果:2023-08-09 11:

Built with Hugo
主题 StackJimmy 设计