出现环境:sqlserver数据库需要存储 䶮 这个字,发现存进去之后就变成?号如图
需要将字段改为utf8编码,sqlserver中varchar存储汉字可能会出现乱码,所以将字段改为nvarchar,然后显示正常,如图
但是当项目中用jpa进行查询时出现
org.hibernate.MappingException: No Dialect mapping for JDBC type: -9错误,Hibernate框架的方言(Dialect )没有数据库中数据类型nvarchar的映射,只有varchar类型的映射。所以在启动时出现此异常。
然后就自定义方言类
package com.hnzr.config;
import java.sql.Types;
import org.hibernate.dialect.SQLServer2008Dialect;
public class SqlServer2008Dialect extends SQLServer2008Dialect{
public SqlServer2008Dialect() {
super();
//registerHibernateType(Types.NVARCHAR, "string");
registerHibernateType(-9, "string");
/*
* 1.
registerHibernateType(Types.CHAR, Hibernate.STRING.getName());
registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());
registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName());
registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName());
2.由于1中的Hibernate.STRING已废弃,所以用2
registerHibernateType(1, "string");
registerHibernateType(-9, "string");
registerHibernateType(-16, "string");
registerHibernateType(3, "double"); */
}
}
在application.yml中指定方言类,完美解决
server:
port: ${port:8080}
spring:
jpa:
generate-ddl: false
show-sql: true
hibernate:
ddl-auto: none
properties:
hibernate:
dialect: com.hnzr.config.SqlServer2008Dialect #指定方言类