冷战女生要主动联系吗:MySQL Hibernate 集成时中文乱码处理

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 03:34:26
有一次在开发javaEE的时候,需要用到Mysql,当时的服务器使用的是linux,我把所有的东西都写好了,但是在界面上出现的字符总是“???”,当时以为是数据库存放的编码不对!我发现mysql中的数据库编码也是utf8(我在struts2中配置的是utf-8)

    当时很头疼,做了很长时间的javaEE,怎么还有这样的问题存在,当时查了很多资料,感觉都不能满意,终于有一次在google上面看英文的解说(英语不好,一般都是跳过英文的),老外的意思是需要在Hibernate连接数据库的字符串里面追加字符编码格式,比如请求hello这个数据库,那么请求的连接字符是:

  1.   
  2.             jdbc:mysql://127.0.0.1:3306/hello?useUnicode=true&characterEncoding=UTF-8  
  3.   

但是连接了,发现界面和后台答应出来的还是“???”,.当时特别郁闷,没办法,还是继续看国外的一些文章,最后终于明白,这种写法是没有问题的,关键的错误问题的存在“&”,要把上面的“&”修改为“&”,我实验了一些,结果这种方式的确可以解决“??”这种情况
   完整的写法:jdbc:mysql://127.0.0.1:3306/hello?useUnicode=true&characterEncoding=UTF-8

所以以后大家如果出现了这种问题,就需要为Hibernate的连接url添加字符编码了哦!


========================================

mysql官方提供的JDBCDriver,其JAVA类名为:com.mysql.jdbc.Driver

mysql JDBC URL格式如下:
jdbc:mysql://[host:port]/[database][?参数名1][=参数值1][&参数名2][=参数值2]...

参数名称     参数说明     缺省值       最低版本要求
user             数据库用户名(用于连接数据库) 所有版本
password     用户密码(用于连接数据库) 所有版本
useUnicode     是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或 gbk,本参数值必须设置为true false 1.1g
characterEncoding   当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk false 1.1g
autoReconnect     当数据库连接异常中断时,是否自动重新连接? false 1.1
autoReconnectForPools     是否使用针对数据库连接池的重连策略 false 3.1.3
failOverReadOnly     自动重连成功后,连接是否设置为只读? true 3.0.12
maxReconnectsautoReconnect     设置为true时,重试连接的次数 3 1.1
initialTimeoutautoReconnect     设置为true时,两次重连之间的时间间隔,单位:秒 2 1.1
connectTimeout     和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本 0 3.0.1
socketTimeout     socket操作(读写)超时,单位:毫秒。 0表示永不超时 0 3.0.1


对应中文环境,通常mysql连接URL可以设置为:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

在使用数据库连接池的情况下,最好设置如下两个参数:
autoReconnect=true&failOverReadOnly=false

需要注意的是,在xml配置文件中,url中的&符号需要转义。比如在tomcat的server.xml中配置数据库连接池时,mysqljdbc url样例如下:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk
&autoReconnect=true&failOverReadOnly=false

Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=569304