使用Liquibase与Docker postgis/postgis时出现编码错误问题求助
Liquibase执行SQL日志输出方法
要打印Liquibase运行时实际执行的插入语句,直接在Spring Boot的配置文件中添加如下日志配置即可:
# application.yml 配置 logging: level: # 开启liquibase基础日志 liquibase: DEBUG # 打印所有执行的JDBC语句 liquibase.executor.jvm.JdbcExecutor: TRACE
如果使用properties格式配置:
# application.properties 配置 logging.level.liquibase=DEBUG logging.level.liquibase.executor.jvm.JdbcExecutor=TRACE
开启后可以直接在控制台看到Liquibase发送到数据库的完整SQL内容,可用于确认是读取文件阶段就已经乱码,还是写入数据库阶段才出现异常。
编码问题解决方案
结合你已完成的排查和降级3.8.7版本恢复正常的测试结果,该问题属于Liquibase 4.3.5版本的已知编码bug,该版本在系统默认编码非UTF-8的环境下(多为Windows设备)会优先读取系统默认编码解析变更文件,不会使用指定的UTF-8参数,这也是为什么仅你的设备出现问题、其他同事运行正常的原因。可尝试以下方案修复:
- 显式指定Spring Liquibase的编码配置,不要仅依赖JVM参数:
spring: liquibase: encoding: UTF-8
- 在pom.xml中添加全局编码配置,覆盖Maven运行时的默认编码:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
- 检查变更文件的编码声明:
- XML格式的变更文件确认头部声明为
<?xml version="1.0" encoding="UTF-8"?> - SQL格式的变更文件在开头加上
-- changeset 你的标识:版本号 encoding:UTF8
- XML格式的变更文件确认头部声明为
- 临时解决方案:如果上述配置均无效,可暂时锁定使用3.8.7版本,待升级到4.10以上的更高稳定版Liquibase后再尝试更新。
内容的提问来源于stack exchange,提问作者Ersch
相关产品推荐
相关产品推荐

