阿拉伯语不保存在Oracle数据库中

ee7vknir  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(111)

我们正在从API接收Json负载,例如

{
"customerName": "علي الدويش",
"customerCode": "999999",
"shipAddress1": "البلاغة", 
}

我们使用Sping Boot 将其保存在对象jsonObjectPayload

String payloadStr = mapper.readTree(jsonObjectPayload).toPrettyString();
queue.setPayload(new String(payloadStr.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8));

当将其保存在Oracle列中时,数据类型为CLOB
输出:我们得到的值为:

{
"customerName" : "��� ������",
"shipAddress1" : "�������",
}

我们正在使用Oracle Database 12 c Enterprise Edition Release 12.2.0.1.0 - 64 bit Production和NLS_CHARACTERSET AR8MSWIN1256
在UAT环境中,我们有NLS_CHARACTERSET AL32UTF8,值反映了阿拉伯语1,这个问题与NLS_CHARACTERSET有关吗?因为两者都支持阿拉伯编码。
我们也尝试在java中使用queue.setPayload(new String(payloadStr.getBytes("8859_1"), "UTF-8"));,但没有发生相同的差异??垃圾值有没有代码保存数据在数据库中

public void insertOrderInvoiceInQueue(OrderInvoiceQueueDTO invoice) 
{
String sql = "INSERT INTO AMG_OIP_ORDER_INVOICE_QUEUE (PAYLOAD) VALUES (:payload)";
SqlParameterSource parameters = new MapSqlParameterSource()
                .addValue("payload", invoice.getPayload())
            
logger.info("Saving invoice AMG_OIP_ORDER_INVOICE_QUEUE table.");
        xcenterjdbcTemplate.update(sql, parameters);
        logger.info("Saved...");
    }
pb3s4cty

pb3s4cty1#

前面的表列有CLOB数据类型,它保存阿拉伯语的有效载荷。现在我将其更改为NCLOB数据类型,因为它使用每个字符2或3个字节来存储Unicode字符集中的字符。现在阿拉伯字符存储在数据库中。

相关问题