hibernate hbm2ddl.import_files 中文乱码问题

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

启动即可。

wKiom1RqtFzy5sXiAAR8idZInMY969.jpg


但是现在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按钮。

wKiom1Rqs4_Ag_gOAAQst-vGrtA333.jpg

另外,这里关于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>


你可能感兴趣的:(Hibernate,中文乱码)