我正在使用Spring 4.3.1和JPA 2.0,并连接到MSSQL。我正在使用JpaRepository的保存方法插入和更新数据。其中一个字段有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'。有什么建议吗?
3条答案
按热度按时间cnh2zyt31#
将字段声明为byte[]数组,如下所示。
在Map的时候,你必须使用UTF-16将byte[]转换成String,这样做的技巧如下。
至DB:
就是这个,会有魔力的.
xmd2e60i2#
实际上不必为字段定义byte[] array
够了
ql3eal8s3#
也许这对其他人有帮助,因为我是在研究stackoverflow中的所有文章的过程中来的。(Java/Jboss/Hibernate/JPA/M$ SqlServer)运行良好,正确处理了来自UI输入的字符串。但我也通过EJB将一些数据加载到数据库中。这里,带有德语Umlaute的字符串损坏并Map错误。*.java使用UTF-8正确编码,所有工具都显示UTF-8编码。
我遵循了所有的建议,在互联网/stackoverflow.使用
什么都帮不上忙。
最后我发现了问题。我是一个Gradle问题。我正在调用javac编译器:
在我的环境中,源代码没有被解释为UTF-8编码,所以编译后的 *.class被解释为拉丁语。EJB正在将拉丁语加载到DB(JPA)中。
解决方案:
所以:@Column(columnDefinition =“nvarchar(255)”)就足够了。