Интеграция сервера Spring + Hibernate + Sql с поддержкой юникода - PullRequest
4 голосов
/ 11 марта 2009

Как я могу интегрировать Spring с Hibernate, используя sql server 2005 и иметь поддержку Unicode. Я пробовал много разных способов, но просто не мог заставить его работать.

Столбец в таблице - это nvarchar, в Spring - UTF-8. Я могу читать текст в Юникоде (который я сам добавил с помощью инструмента управления сервером sql), но запись не работает, она теряет смысл в БД.

URL JDBC

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

с этими свойствами в файле конфигурации Hibernate

<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");

Есть ли какая-нибудь добрая душа, которая преуспела в этом и может помочь?

Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 24 февраля 2010

Попробуйте предложение здесь: 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");
    }
}
2 голосов
/ 12 марта 2009

Кажется, вам нужно изменить ответ и кодировку запроса в фильтре на UTF-8, и все хорошо!

0 голосов
/ 12 марта 2013
public class SQLServerUnicodeDialect extends org.hibernate.dialect.SQLServerDialect {
    public SQLServerUnicodeDialect() {
        super();
        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() );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...