hibernate提供如下配置,支持在新建数据库时,执行import文件初始化数据库:
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.hbm2ddl.import_files">init_sql.sql</prop>
在init_sql.sql文件中,写了这样一条语句:
insert into sys_menu(id, href, icon, is_activiti, is_show, name, parent_ids, permission, sort, parent_id) values('1','/hello','','0','1','欢迎页','','',1,'1');
在启动时,初始化报错,看到其中的sql语句中文乱码:
org.hibernate.tool.hbm2ddl.ImportScriptException: Error during statement execution (file: 'init_sql.sql'): insert into sys_menu(id, href, icon, is_activiti, is_show, name, parent_ids, permission, sort, parent_id) values('1','/hello','','0','1','娆㈣�椤?,'','',1,'1')
init_sql.sql文件是utf8编码,与数据库编码一致。配置hibernate编码格式如下:
<prop key="hibernate.connection.useUnicode">true</prop> <prop key="hibernate.connection.characterEncoding">UTF-8</prop> <prop key="hibernate.connection.charSet">UTF-8</prop>
问题依旧,于是开始找解决办法,找到了这里,
http://javacimrman.blogspot.ru/2011/07/hibernate-importsql-encoding-when.html
说的是maven工程如何解决这个问题。而我的工程是用tomcat启动的,类推,启动时应配置-Dfile.encoding=UTF8,步骤如下:
右键单击工程-->debug as/run as-->debug configuration/run configuration-->Arguments-->VM Arguments中加入-Dfile.encoding=UTF8
启动即可。
但是现在console的输出成了这样:
��涓��?18, 2014 10:40:27 涓��� org.apache.catalina.core.ApplicationContext log 淇℃��: Initializing Spring FrameworkServlet 'spring' ��涓��?18, 2014 10:40:29 涓��� org.apache.coyote.http11.Http11Protocol start 淇℃��: Starting Coyote HTTP/1.1 on http-8080 ��涓��?18, 2014 10:40:29 涓��� org.apache.jk.common.ChannelSocket init 淇℃��: JK: ajp13 listening on /0.0.0.0:8009 ��涓��?18, 2014 10:40:29 涓��� org.apache.jk.server.JkMain start 淇℃��: Jk running ID=0 time=0/32 config=null ��涓��?18, 2014 10:40:29 涓��� org.apache.catalina.startup.Catalina start 淇℃��: Server startup in 12756 ms
所以现在应该修改一下console的编码(如下图):
1.Run -> Run configurations...
2.在Java Application中选中你的引用程序。
3.选中Common标签页。
4.在Console encoding项中选择Other,然后选中UTF-8。
5.点击Apply按钮。
另外,这里关于hibernate的配置不影响这里的问题,去掉后应用上述方法依然可以work。
<prop key="hibernate.connection.useUnicode">true</prop> <prop key="hibernate.connection.characterEncoding">UTF-8</prop> <prop key="hibernate.connection.charSet">UTF-8</prop>