hibernate提供如下配置,支持在新建数据库时,执行import文件初始化数据库:

${hibernate.hbm2ddl.auto}
init_sql.sql

在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编码格式如下:

true
UTF-8
UTF-8

问题依旧,于是开始找解决办法,找到了这里,

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

启动即可。

hibernate hbm2ddl.import_files 中文乱码问题_第1张图片


但是现在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 hbm2ddl.import_files 中文乱码问题_第2张图片

另外,这里关于hibernate的配置不影响这里的问题,去掉后应用上述方法依然可以work。

true
UTF-8
UTF-8