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

Eclipse Maven Spring Boot项目JDBC读Oracle阿拉伯字符乱码问题

Oracle JDBC读取AR8MSWIN1256阿拉伯字符显示问号故障处理

问题基础信息

  • 项目栈:Spring Boot + JDBC + Oracle 11G + JDK 8
  • 库表字符集:AR8MSWIN1256(阿拉伯语Windows代码页字符集)
  • 启动方式:执行mvn clean package spring-boot:run启动
  • 已尝试无效方案:配置JVM参数-Dfile.encoding、修改Eclipse STS工作区编码为UTF-8/UTF-16
  • 故障表现:查询返回的阿拉伯字段全部输出为问号

关联代码

预编译插入语句

INSERT INTO <TABLE_NAME> VALUES (1,1,'ممرضة التشفير شفير شفير شف','R20');

查询语句

SELECT * FROM <TABLE_NAME> WHERE ID=?;

结果遍历打印代码

ResultSet rs = pstmt.executeQuery();        
String resultStrId = null;
while (rs.next()) {
    resultStrId = rs.getString(1);
    System.out.println(resultStrId);
    System.out.println(rs.getString(2));
    break;
}
rs.close();

输出对比

当前实际输出

Success from preparedStatement prepare for version 19.6.0.0
????? ??????? ???? ???? ??

预期输出

ممرضة التشفير شفير شفير شف

备注:提问者不掌握阿拉伯语。

修复步骤

  1. 修正JDBC连接串配置
    AR8MSWIN1256在Java侧对应的字符集名称是CP1256,直接在Spring Boot数据源连接URL中添加JDBC驱动级字符集参数,不要依赖全局JVM编码配置:
    # application.properties 配置示例
    spring.datasource.url=jdbc:oracle:thin:@//<数据库IP>:1521/<服务名>?oracle.jdbc.defaultNChar=true&characterEncoding=CP1256
    
    其中oracle.jdbc.defaultNChar=true强制JDBC驱动对所有字符串类型字段走国家字符集转码通道,避免驱动默认按ISO-8859-1转码丢失阿拉伯字符。
  2. 修正预编译语句传参方式
    不要直接把阿拉伯字符串硬编码拼接到SQL语句中,所有字符串参数统一用?占位,通过PreparedStatement.setString()方法传入,避免SQL解析阶段的编码转义错误。
  3. 修正Maven启动的JVM编码配置
    在pom.xml中给spring-boot-maven-plugin插件显式指定JVM编码参数,避免mvn启动时继承系统默认编码:
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
        </configuration>
    </plugin>
    
  4. 控制台编码适配
    Windows环境启动前先在命令行执行chcp 65001切换控制台为UTF-8代码页;STS/Eclipse中除了工作区编码,还要在对应启动配置的VM参数中追加-Dfile.encoding=UTF-8,保证控制台打印时不会二次转码成问号。
  5. 数据库端配置校验
    登录Oracle执行以下SQL确认库字符集配置正确,避免建库时字符集配置和预期不符:
    SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
    
    正常返回值应为AR8MSWIN1256。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:09:29