使用 liquibase 和 docker postgis/postgis 的错误编码
Posted
技术标签:
【中文标题】使用 liquibase 和 docker postgis/postgis 的错误编码【英文标题】:Wrong encoding using liquibase and docker postgis/postgis 【发布时间】:2021-12-12 13:18:51 【问题描述】:我的 sprintboot 项目使用 docker postgresql db postgis/postgis 有一个非常奇怪的行为。
我用这个 docker 文件创建带有 db 的 docker 容器:
version: '3'
services:
project-postgresql:
image: postgis/postgis:13-master
volumes:
- ./postgres-initdb/:/docker-entrypoint-initdb.d/
environment:
- POSTGRES_USER=xxx
- POSTGRES_PASSWORD=xxx
ports:
- 9432:5432
数据库是用 UTF8 创建的:
project-postgresql_1 | The database cluster will be initialized with locale "en_US.utf8".
project-postgresql_1 | The default database encoding has accordingly been set to "UTF8".
project-postgresql_1 | The default text search configuration will be set to "english".
当我开始我的 springboot 项目时,会播放 liquibase 更改日志,并在数据库中插入一些内容,但编码似乎错误,并且所有重音都被特殊字符替换。
我检查了什么:
除了 intellij 和编码正确设置为 utf8 的其他编辑器中更改日志文件的编码。 在 db 控制台中,我尝试运行 SHOW SERVER_ENCODING,它是 UTF8 我尝试删除编码错误的行,然后从控制台的更改日志中复制过去插入,并且编码正确 尝试使用重音符号从应用程序中持久化一些数据,它可以工作。 尝试在启动应用程序之前运行 liquibase:update -Dfile.encoding=UTF-8,同样的编码问题。 我查看了目标后端\target\classes\db\更改日志的编码,它们是正确的。 尝试删除 docker 容器、镜像并从头开始。我们是同一个项目的 3 个开发人员,问题仅在我的开发机器上,我使用相同堆栈的所有其他项目都在同一台机器上工作。
附加信息:
<liquibase.version>4.3.5</liquibase.version>
<liquibase-hibernate5.version>4.3.5</liquibase-hibernate5.version>
<testcontainers.version>1.15.3</testcontainers.version>
<hibernate-types.version>2.10.2</hibernate-types.version>
您是否知道一种方法来显示 liquibase 在启动时播放的插入语句的输出?或者可能有另一个解决这个问题的想法?
更新
我尝试将 liquibase 版本从 4.3.5 更改为旧版本 (3.8.7),它可以工作。我还尝试从我的 .m2 文件夹中删除 liquibase 并再次导入版本 4.3.5 并再次出现同样的问题。
谢谢, 厄施
【问题讨论】:
【参考方案1】:我们已经看到这个问题发生了,可能的解决方案是设置JAVA_OPTS
参数。此解决方案适用于使用 liquibase CLI 的用户。
For Windows:
set JAVA_OPTS=-Dfile.encoding=UTF-8 && liquibase update
For Linux:
JAVA_OPTS=-Dfile.encoding=UTF-8 liquibase update
【讨论】:
以上是关于使用 liquibase 和 docker postgis/postgis 的错误编码的主要内容,如果未能解决你的问题,请参考以下文章
使用 Liquibase 的 Spring Boot 未在 Docker 中执行
JAVA SpringBoot:在 Docker 中,liquibase 插件运行时出现错误并且不执行更改日志