2008-04-20
Jboss Seam, mysql中文乱码问题4步骤总结
关键字: seam hbm2ddl 中文 乱码 mysql
其实以下总结适合于任何hibernate+mysql的情况;
步骤1:在创建数据库Schema的时候请指定编码,例如mysql,就用这样的语句来建立Schema:
这一步必须这样,因为至少我在网上还没找到hbm2ddl的配置方法使得hibernate生成的数据库表的编码能被指定,那么为schema设置一个默认的编码就是最简便的方法;当然,你也可以不在schema上设置默认编码,等到hibernate生成表之后,在一个一个表地去改编码。具体可查阅数据库帮助文档。
“步骤1”得不到确认的话,下面的步骤可以忽略;
步骤2:在工程中的每一个页面,设置meta信息
这个不多解释了,设置了这个后,起码你的页面能“容得下”中文了。这一步建议在模板技术里解决,在最外层的模板里加上这个meta就行了,不用每个页面都加。
至此,你会发现直接写死在页面上的中文没问题;直接用数据库管理客户端的console插入的中文也没问题;就是经由程序插入的中文数据有问题;那么:
步骤3:指定数据库连接url的参数,例:
这样,经由程序插入的数据应该也能行了。
最后,有时候需要用GET方式在url的参数里传中文,url里的中文是需要被编码之后才能传的,像tomcat默认的uriEncoding是iso-8859-1,这会导致经由url传过来的中文值变乱码;这就需要在server.xml的connector节点里配置“URIEncoding='UTF-8'”,例如:
我这个是jboss的,server.xml位置在deploy/jboss-web.deployer下,tomcat的话很好找了,配置起来都一样。
最最后,你是不是认为还有一招“filter”的方式?以前用过一段时间struts的时候filter很管用,但现在我在seam下试验过后发觉有没有这个filter都没关系,只要确认上述4步骤那么乱码应该就能解决了;我估计如果框架程序里没有硬编码使用非UTF-8的字符集来encode的话都用不着filter.
步骤1:在创建数据库Schema的时候请指定编码,例如mysql,就用这样的语句来建立Schema:
create schema xxxx default character set utf8;
这一步必须这样,因为至少我在网上还没找到hbm2ddl的配置方法使得hibernate生成的数据库表的编码能被指定,那么为schema设置一个默认的编码就是最简便的方法;当然,你也可以不在schema上设置默认编码,等到hibernate生成表之后,在一个一个表地去改编码。具体可查阅数据库帮助文档。
“步骤1”得不到确认的话,下面的步骤可以忽略;
步骤2:在工程中的每一个页面,设置meta信息
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
这个不多解释了,设置了这个后,起码你的页面能“容得下”中文了。这一步建议在模板技术里解决,在最外层的模板里加上这个meta就行了,不用每个页面都加。
至此,你会发现直接写死在页面上的中文没问题;直接用数据库管理客户端的console插入的中文也没问题;就是经由程序插入的中文数据有问题;那么:
步骤3:指定数据库连接url的参数,例:
jdbc:mysql://localhost:3306/data115?useUnicode=true&characterEncoding=utf-8
这样,经由程序插入的数据应该也能行了。
最后,有时候需要用GET方式在url的参数里传中文,url里的中文是需要被编码之后才能传的,像tomcat默认的uriEncoding是iso-8859-1,这会导致经由url传过来的中文值变乱码;这就需要在server.xml的connector节点里配置“URIEncoding='UTF-8'”,例如:
<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.
- 22:54
- 浏览 (377)
- 评论 (2)
- 分类: Jboss Seam
- 发布在 JBoss SEAM 圈子
- 相关推荐
评论
pf_miles
2008-05-09
引用
如果seam工程里面用到了richfaces也会出现乱码,因为richfaces老版本有bug,会导致中文乱码,最新版本已经解决了
是这样吗?我接触seam不久,帖子里的内容是我摸索过程中总结出来的;我用过的最低的richfaces版本是314,已经算是很新了,没遇到过乱码问题,谢谢你的补充;
另外,其实关于我在文中提到的“步骤1”,我还想补充两句,就是:有时候由于一些历史原因,数据库的编码或许真的没办法再被改变成GBK或UTF-8,其实这时候也并非无药可救,这时可以自己实现编码的双向转换,比如设置启动参数 -Dapplication.codeset=GBK -Ddatabase.codeset=iso-8859-1,然后在某个地方统一地利用这两个参数实现编码的双向转换;这样一来,存在数据库里的中文都是乱码,但是读到应用中还是可以被转换出来正常显示的。
lw223
2008-05-07
如果seam工程里面用到了richfaces也会出现乱码,因为richfaces老版本有bug,会导致中文乱码,最新版本已经解决了
发表评论
- 浏览: 13578 次
- 性别:

- 来自: 杭州

- 详细资料
搜索本博客
我的相册
svP4
共 10 张
共 10 张
最新评论
-
Jboss Seam, mysql中文乱 ...
引用如果seam工程里面用到了richfaces也会出现乱码,因为richfac ...
-- by pf_miles -
Jboss Seam, mysql中文乱 ...
如果seam工程里面用到了richfaces也会出现乱码,因为richfaces ...
-- by lw223 -
她太NB了,我承认她是御宅 ...
口袋妖怪我喜欢同道中人
-- by tianma168 -
Do what the fuck you wan ...
这个license就是现实的license啊
-- by eyejava -
Do what the fuck you wan ...
引用By the way, with the WTFPL, can I also ...
-- by wangdi






评论排行榜