Возникла ситуация, в которой при сохранении не-англоязычного текста в базу сохранялись вопросики. Понятно что дело в кодировке подключения к БД (хотя так же может быть и кодировка таблиц, если не юникод). Используется Hibernate 3 из-под бинов Spring 3.0.2
Кусок конфигурации из applicationContext.xml, где устанавливается DataSource (в нём и задаются настройки подключения)
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/dbname" />
<property name="username" value="_user_" />
<property name="password" value="_pass_" />
</bean>
Гугл подсказывает сразу же что кодировка задаётся в свойстве url, с помощью параметров autoReconnect, useUnicode, characterEncoding, в формате схожем с GET-запросом - через амперсанд.
Пример:
<property name="url"
value="jdbc:mysql://localhost:3306/dbname?amp;useUnicode=true&characterEncoding=UTF-8" />
Внимание: & - это НЕ ОШИБКА, именно такая запись нужна, в 5 символов. Просто амперсанды указывать нельзя, иначе xml парсер спринга подумает что это спец-знаки. Не понимаю, почему на многих форумах стоят просто амперсанды - которые и приводят в замешательство читателей :)
Если вы всё таки прочитав форумы указали не & а &, то будет следующая ошибка
SEVERE: null
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 15 in XML document from class path resource [applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: The reference to entity "useUnicode" must end with the ';' delimiter.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
......
Caused by: org.xml.sax.SAXParseException: The reference to entity "useUnicode" must end with the ';' delimiter.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
.......