有关SQLServer中varchar和nvarchar的区别可以直接去google。一般在中文系统中应该使用nvarchar作为字符串的对应类型,但是Hibernate中的默认实现SQLServerDialect使用了varchar。以下方法可以简单地转为使用nvarchar:

自己写一个dialect,继承SQLServerDialect,在构造器中将原先varchar类型的注册声明覆盖:

registerColumnType(Types.VARCHAR, "nvarchar($l)");

千万注意,“$”后面的是字段长度的占位符,是“l(ength)”,而不是数字“1”(因为看hibernate的doc时没分清“l”和“1”,浪费了我一上午去找原因)

然后在hibernate的配置文件中将hibernate.dialect的值设为你的dialect实现类就OK了