Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1237406
  • 博文数量: 220
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1769
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-13 16:19
个人简介

努力, 努力, 再努力

文章分类

全部博文(220)

文章存档

2018年(8)

2017年(46)

2016年(75)

2015年(92)

我的朋友

分类: JavaScript

2015-11-20 20:04:45

摘自: http://www.cnblogs.com/rgbw/archive/2009/09/25/1573998.html

其实以下总结适合于任何hibernate+mysql的情况;

步骤0: 操作系统要支持中文,例如设置linux系统默认语言为UTF-8

步骤1:在创建数据库Schema的时候请指定编码,例如mysql,就用这样的语句来建立Schema:

Sql代码

create schema xxxx default character set utf8;

这一步必须这样,因为至少我在网上还没找到hbm2ddl的配置方法使得hibernate生成的数据库表的编码能被指定,那么为schema设置 一个默认的编码就是最简便的方法;当然,你也可以不在schema上设置默认编码,等到hibernate生成表之后,在一个一个表地去改编码。具体可查 阅数据库帮助文档。 

注意: schema 在mysql里的含义就是数据库名,在MS SQL2005里有特定的含义

参见:数据库schema与catalog简介


“步骤1”得不到确认的话,下面的步骤可以忽略;

步骤1.5 mysql数据库要设置支持中文
        
         在
/etc/my.cnf

[client]

添加default-character-set = utf8

[mysqld]

添加default-character-set = utf8

 注意: 如果这里不改成UTF-8编码,或者其他支持中文的编码,会导致前端页面应用程序向数据库表里写数据时,不识别中文,而是?
       增加UTF-8编码后,要重新加载数据库设置或者重启数据库。

验证方法:如下图



步骤2:在工程中的每一个页面,设置meta信息

Html代码


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
这个不多解释了,设置了这个后,起码你的页面能“容得下”中文了。这一步建议在模板技术里解决,在最外层的模板里加上这个meta就行了,不用每个页面都加。

至此,你会发现直接写死在页面上的中文没问题;直接用数据库管理客户端的console插入的中文也没问题;就是经由程序插入的中文数据有问题;那么:

步骤3:指定数据库连接url的参数,例:

Xml代码


jdbc:mysql://localhost:3306/data115?useUnicode=true&amp;characterEncoding=utf-8
这样,经由程序插入的数据应该也能行了。

注释: 步骤3: 解决了我通过JBOSS页面往mysql里写入中文是乱码的问题,在jdbc数据库连接里没有指定UTF-8字符集

最后,有时候需要用GET方式在url的参数里传中文,url里的中文是需要被编码之后才能传的,像tomcat默认的uriEncoding是iso- 8859-1,这会导致经由url传过来的中文值变乱码;这就需要在server.xml的connector节点里配置 “URIEncoding='UTF-8'”,例如:

Xml代码


<Connector port="8080" address="${jboss.bind.address}" 
 maxThreads
="250" maxHttpHeaderSize="8192" 
 emptySessionPath
="true" protocol="HTTP/1.1" 
 enableLookups
="false" redirectPort="8443" acceptCount="100" 
 connectionTimeout
="20000" disableUploadTimeout="true" URIEncoding='UTF-8'/>
我这个是jboss的,server.xml位置在deploy/jboss-web.deployer下,tomcat的话很好找了,配置起来都一样。

最最后,你是不是认为还有一招“filter”的方式?以前用过一段时间struts的时候filter很管用,但现在我在seam下试验过后发觉有没有 这个filter都没关系,只要确认上述4步骤那么乱码应该就能解决了;我估计如果框架程序里没有硬编码使用非UTF-8的字符集来encode的话都用 不着filter.
阅读(1281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~