You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven忽略UTF-8编码参数使用Cp1252致数据库特殊字符乱码

解决Maven命令执行时Flyway迁移乱码(cp1252转UTF-8)问题

针对IntelliJ运行JUnit测试时德语变音字符显示正常,但执行Maven命令链时编码变为cp1252导致乱码的问题,可按以下步骤排查解决:

1. 强制Maven全局JVM使用UTF-8编码

project.build.sourceEncoding仅控制编译阶段的文件编码,JVM运行时的file.encoding仍可能继承系统默认值(Windows下为cp1252)。需在命令行直接指定JVM编码参数:

mvn clean verify jacoco:report sonar:sonar -Dproject.build.sourceEncoding=UTF-8 -Dproject.reporting.outputEncoding=UTF-8 -Dfile.encoding=UTF-8

也可在settings.xml(全局或用户级)中配置全局JVM参数,避免重复输入:

<profiles>
    <profile>
        <id>utf8</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
            <file.encoding>UTF-8</file.encoding>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <argLine>-Dfile.encoding=UTF-8</argLine>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

2. 配置JUnit测试阶段的JVM编码

spring-boot-maven-plugin的jvmArguments仅作用于打包后的应用启动,测试阶段的JVM参数需单独配置maven-surefire-plugin:
在pom.xml的<build><plugins>中添加:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.5</version>
    <configuration>
        <argLine>-Dfile.encoding=UTF-8</argLine>
        <!-- JUnit 5环境下添加此项确保参数生效 -->
        <forkCount>1</forkCount>
        <reuseForks>false</reuseForks>
    </configuration>
</plugin>

3. 验证Flyway迁移脚本的文件编码

确保所有.sql迁移脚本以UTF-8无BOM格式保存:

  • 在IntelliJ中右键脚本文件 → File Encodings,确认编码为UTF-8,若存在BOM则勾选Remove BOM。
  • 避免脚本被编辑器默认保存为系统编码(cp1252),否则即使Flyway配置了编码,读取文件仍会乱码。

4. 数据库连接URL指定UTF-8编码

确保应用与数据库的连接传输使用UTF-8,在application.properties或application.yml中修改数据库URL:

  • MySQL:
    spring.datasource.url=jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    
  • PostgreSQL:
    spring.datasource.url=jdbc:postgresql://localhost:5432/your_db?client_encoding=UTF8
    

5. 系统环境变量全局配置(可选)

Windows系统中,设置环境变量强制所有Java进程使用UTF-8:

  • 添加系统环境变量JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
  • 重启控制台后执行Maven命令,确保环境变量生效

内容的提问来源于stack exchange,提问作者DerSilver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:50:01