【问题标题】:Integrating Spring + Hibernate + Sql server with unicode support将 Spring + Hibernate + Sql server 与 unicode 支持集成
【发布时间】:2010-10-12 18:12:06
【问题描述】:

如何使用 sql server 2005 将 Spring 与 Hibernate 集成并支持 Unicode。 我尝试了很多不同的方法,但我就是无法让它发挥作用。

表中的列是nvarchar,Spring中的字符集是UTF-8。 我可以阅读 Unicode 文本(我自己使用 sql server 管理工具添加的),但写入不起作用,它在数据库中被乱码。

jdbc 网址是

jdbc:sqlserver://localhost:1433;useUnicode=true;characterEncoding=UTF-8;databaseName=test;

在休眠配置文件中使用这些属性

<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.charSet">UTF8</property>

我还有一个过滤器可以更改所有页面的编码

response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF8");

chain.doFilter(request, response);

//do it again, since JSPs will set it to the default
response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF8");

有没有好心人成功做到这一点,可以提供帮助?

非常感谢!

【问题讨论】:

  • 检查一下,但我不相信 SQL Server 支持 UTF8。我认为你能得到的最接近的近似值是他们的 UCS-2 编码。见this MSDN article
  • 如果我不能使用 UTF-8 ,最好知道如何使用 UCS-2(或 UTF-16..)来做到这一点。除了把charset改成UCS-2还有什么特别的吗?

标签: sql-server hibernate spring unicode


【解决方案1】:

看来你需要把过滤器中的response和request编码改成UTF-8就行了!

【讨论】:

    【解决方案2】:

    在此处尝试建议:http://blog.tremend.ro/2007/05/23/hibernate-utf-8-and-sql-server-2005/

    /**
     * Unicode support in SQL Server
     */
    public class UnicodeSQLServerDialect extends SQLServerDialect {
    
        public UnicodeSQLServerDialect() {
            super();
    
            // Use Unicode Characters
            registerColumnType(Types.VARCHAR, 255, "nvarchar($l)");
            registerColumnType(Types.CHAR, "nchar(1)");
            registerColumnType(Types.CLOB, "nvarchar(max)");
    
            // Microsoft SQL Server 2000 supports bigint and bit
            registerColumnType(Types.BIGINT, "bigint");
            registerColumnType(Types.BIT, "bit");
        }
    }
    

    【讨论】:

      【解决方案3】:
      公共类 SQLServerUnicodeDialect 扩展 org.hibernate.dialect.SQLServerDialect { 公共 SQLServerUnicodeDialect() { 极好的(); registerColumnType(Types.CHAR, "nchar(1)"); registerColumnType(Types.LONGVARCHAR, "nvarchar(max)" ); registerColumnType(Types.VARCHAR, 4000, "nvarchar($l)"); registerColumnType(Types.VARCHAR, "nvarchar(max)"); registerColumnType(Types.CLOB, "nvarchar(max)" ); registerColumnType(Types.NCHAR, "nchar(1)"); registerColumnType(Types.LONGNVARCHAR, "nvarchar(max)"); registerColumnType(Types.NVARCHAR, 4000, "nvarchar($l)"); registerColumnType(Types.NVARCHAR, "nvarchar(max)"); registerColumnType(Types.NCLOB, "nvarchar(max)"); registerHibernateType(Types.NCHAR, StandardBasicTypes.CHARACTER.getName()); registerHibernateType(Types.LONGNVARCHAR, StandardBasicTypes.TEXT.getName()); registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName()); registerHibernateType(Types.NCLOB, StandardBasicTypes.CLOB.getName()); } }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 2015-02-13
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 2018-08-16
        • 1970-01-01
        相关资源
        最近更新 更多