陌上花开

遇高山,我御风而翔,逢江河,我凌波微波

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::

#

最近一个项目,用到了mysql数据库,很不幸的是我遇到了乱码问题,分析了一下,我觉得不是网页的问题.因为,我在MYSQL里直接添加中文的数据能在网页上正常显示,可是在网页中操作添加的数据,到MYSQL数据库里一看,全是???问号.跟踪看了下,程序中最后处理到数据库操作时,还是中文,操作到数据库后,就是?问号了,能在mysql表中直接添加中文数据并能在网页上正常显示,说明数据库表的编码是对的,程序中最后处理的数据也是中文,这也说明程序中也没有问题,问题可能出在MYSQL数据库连接字符串上,于是我把mysql数据库连接字符串改为:  jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=UTF-8(有时可能需要将符号(&)转码写成(&)),试了一下,还是不行,百思不得其解,就问了下google,有人说,可能是数据库的默认编码错误,原因在于MYSQL服务器使用的默认编码,在没指定数据库的字符编码时,创建的数据库就使用MYSQL服务器的默认编码,但是,如果MYSQL服务器的配置文件没有指定编码时,很可能就是使用的latin1编码.
查看服务器和数据库使用何种编码的MYSQL命令为:
SHOW VARIABLES LIKE 'character_set_%'; 
以及 SHOW VARIABLES LIKE 'collation_%';
看到里面使用的编码了,我本以为应该使用的是utf8,所以,不是utf8的,那就说明问题在这里了.

运行命令:SHOW VARIABLES LIKE 'character_set_%'; 结果如下
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'latin1'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'latin1'
'character_set_system', 'utf8'
'character_sets_dir', 'D:\soft_work\mysql\share\charsets\'
果然发现有几个不对的
运行命令:SHOW VARIABLES LIKE 'collation_%'; 结果如下
'collation_connection', 'utf8_general_ci'
'collation_database', 'latin1_general_ci'
'collation_server', 'latin1_general_ci'

只要把那几个的编码改成utf8的,那应该就可以了.
1: 在Mysql的配置文件 my.ini里加上服务器的默认编码配置: default-character-set=utf8
2: 修改你的数据库的字符编码:进入Mysql数据库,通过命令修改你的数据库字符编码:
ALTER DATABASE `databaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci 
(修改后需要重启Mysql数据库)
3: 如果你的表以及表里的字段使用了不正确的字符编码,同样需要修正过来:命令:
 修改表的编码: ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
 修改字段的编码: ALTER TABLE `tableName` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
(做好了时,在看一下上面那两个查看字符编码的命令,看看是否全部都变成了utf8)
把mysql数据库的编码改为utf8后,有试了一下程序,发现不在是乱码了,终于好了,
总结,mysql的乱码有一下几个方面
1,JSP设计页面上是中文,但运行时看到的是乱码,如果是这种情况,就要指定jsp页面的编码,默认情况下,jsp页面的编码是ISO-8859-1,解决方法就是在jsp页面的编码地方加入
<%@ page language="java" contentType="text/html;charset=utf8" %>,
2 ,当用Request对象获取客户提交的汉字时,会出现乱码,那么就需要在项目中加入filter了,(filter在tomcat中自带的有例子,可以照着例子改一下,也可以在googl中搜索一下)
3,由于使用doget方法引起的乱码,可以试着使用dopost提交,
或者是打开tomcat的server.xml文件,找到区块,加入如下一行: 

URIEncoding=”GBK” 

完整的应如下: 
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"
 connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf8"/>
需要重启tomcat,

4,写入到数据库是乱码:
如果你是通过JDBC直接链接数据库的时候,配置的代码如下:
jdbc:mysql://localhost:3306/xxxxx?useUnicode=true&characterEncoding=utf8
这样保证到数据库中的代码是不是乱码。

5,如按照上述步骤解决,写到数据库中的还是乱码,就要检查数据库,表的编码方式了,如果跟程序中的不一致,就要按照本文的介绍的方法修改数据库或者是表的编码了。

posted @ 2010-03-01 15:52 askzs 阅读(6229) | 评论 (0)编辑 收藏

在tomcat的conf目录下找到web.xml,在里面查找  
  <servlet>  
                  <servlet-name>default</servlet-name>  
                  <servlet-class>  
                      org.apache.catalina.servlets.DefaultServlet  
                  </servlet-class>  
                  <init-param>  
                          <param-name>debug</param-name>  
                          <param-value>0</param-value>  
                  </init-param>  
                  <init-param>  
                          <param-name>listings</param-name>  
                          <param-value>true</param-value>  
                  </init-param>  
                  <load-on-startup>1</load-on-startup>  
          </servlet>  
  把里面的  
                  <init-param>  
                          <param-name>listings</param-name>  
                          <param-value>true</param-value>  
                  </init-param>  
  true改为false
posted @ 2010-02-26 17:28 askzs 阅读(551) | 评论 (0)编辑 收藏

最近有个工程,需要把HnSp文件下的index.html作为默认页面(目录结构如下),


我在web.xml中设置<welcome-file>HnSp/index.html</welcome-file>,可是前台index.html

能显示出来,可是页面中的图片都显示不出来(index.html中的图片的路径都是用的相对路

径),后来在发现显示的页面中的图片少了一级,在图片的路径前加入HnSp就能正确显示了

,可是在别的页面通过链接访问index.html页面,图片还是显示不出来,看了知道,多了个

HnSp,看来在图片的路径前加入HnSp是不对的,
我一直想不懂为什么,后来想了个办法解决了,就是在WebRoot下新建一个新的空页面

MyJspjsp,写入如下代码 <%response.sendRedirect("HnSp/index.html"); %>,然后把   

<welcome-file>HnSp/index.html</welcome-file>,改为<welcome-

file>MyJsp.jsp</welcome-file>,这样问题就解决了,都不存在路径错误问题了,

response.sendRedirect()

是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下

个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.

重定向后在浏览器地址栏上会出现重定向页面的URL,由于response是jsp页面中的隐含对象

,故在jsp页面中可以用response.sendRedirect()直接实现重定位。

posted @ 2010-02-26 17:19 askzs 阅读(670) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3 
我要啦免费统计