我们正在从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...");
}
1条答案
按热度按时间pb3s4cty1#
前面的表列有
CLOB
数据类型,它保存阿拉伯语的有效载荷。现在我将其更改为NCLOB
数据类型,因为它使用每个字符2或3个字节来存储Unicode字符集中的字符。现在阿拉伯字符存储在数据库中。