我使用 Spring 4.3.1 和 JPA 2.0 并连接到 MSSQL。我正在使用 JpaRepository 的 save 方法来插入和更新数据。其中一个字段具有 nvarchar,它可以包含特殊字符,如拉丁文、中文。
另外,我在 applicationContext-hibernate.xml 中设置了以下 JPA 属性。
<prop key="hibernate.connection.CharSet">UTF-8</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
当我保存数据时,所有特殊字符都保存为问号(??)。
建议的解决方案是在更新查询前面附加“N”以保持插入的特殊字符。但是,我没有看到如何在 JpaRepository 的 save 方法中附加“N”。有什么建议么?
将字段声明为 byte[] 数组,如下所示。
@Column(name="[colName]", columnDefinition = "nvarchar", length=4000)
private byte[] colName;
在映射时,您必须使用 UTF-16 将 byte[] 转换为 String ,如下所示。
来自数据库(映射):
byte[] eCodeData = dbData.getColName();
if(eCodeData != null){
uiData.setColName(new String(eCodeData, StandardCharsets.UTF_16));
}
to DB:
String eCodeData = uiData.getColName();
if(eCodeData != null){
dbData.setColName(eCodeData.getBytes(StandardCharsets.UTF_16));
}
就是这个。这会发挥魔法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)