﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-陌上花开-随笔分类-mysql</title><link>http://www.blogjava.net/f6k66ve/category/44093.html</link><description>遇高山，我御风而翔，逢江河，我凌波微波</description><language>zh-cn</language><lastBuildDate>Mon, 01 Mar 2010 08:01:32 GMT</lastBuildDate><pubDate>Mon, 01 Mar 2010 08:01:32 GMT</pubDate><ttl>60</ttl><item><title>mysql乱码问题</title><link>http://www.blogjava.net/f6k66ve/archive/2010/03/01/314173.html</link><dc:creator>askzs</dc:creator><author>askzs</author><pubDate>Mon, 01 Mar 2010 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/f6k66ve/archive/2010/03/01/314173.html</guid><wfw:comment>http://www.blogjava.net/f6k66ve/comments/314173.html</wfw:comment><comments>http://www.blogjava.net/f6k66ve/archive/2010/03/01/314173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/f6k66ve/comments/commentRss/314173.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/f6k66ve/services/trackbacks/314173.html</trackback:ping><description><![CDATA[最近一个项目，用到了mysql数据库，很不幸的是我遇到了乱码问题，分析了一下，我觉得不是网页的问题.因为,我在MYSQL里直接添加中文的数据能在网页上正常显示,可是在网页中操作添加的数据,到MYSQL数据库里一看,全是???问号.跟踪看了下,程序中最后处理到数据库操作时,还是中文,操作到数据库后,就是?问号了，能在mysql表中直接添加中文数据并能在网页上正常显示，说明数据库表的编码是对的，程序中最后处理的数据也是中文，这也说明程序中也没有问题，问题可能出在MYSQL数据库连接字符串上，于是我把mysql数据库连接字符串改为:&nbsp; jdbc:mysql://localhost:3306/xxxx?useUnicode=true&amp;characterEncoding=UTF-8(有时可能需要将符号(&amp;)转码写成(&amp;amp;))，试了一下，还是不行，百思不得其解，就问了下google，有人说，可能是数据库的默认编码错误，原因在于MYSQL服务器使用的默认编码,在没指定数据库的字符编码时,创建的数据库就使用MYSQL服务器的默认编码,但是,如果MYSQL服务器的配置文件没有指定编码时,很可能就是使用的latin1编码.<br />
查看服务器和数据库使用何种编码的MYSQL命令为:<br />
SHOW VARIABLES LIKE 'character_set_%';&nbsp; <br />
以及 SHOW VARIABLES LIKE 'collation_%'; <br />
看到里面使用的编码了,我本以为应该使用的是utf8,所以,不是utf8的,那就说明问题在这里了.<br />
<br />
<p>运行命令:SHOW VARIABLES LIKE 'character_set_%'; 结果如下<br />
'character_set_client', 'utf8'<br />
'character_set_connection', 'utf8'<br />
'character_set_database', 'latin1'<br />
'character_set_filesystem', 'binary'<br />
'character_set_results', 'utf8'<br />
'character_set_server', 'latin1'<br />
'character_set_system', 'utf8'<br />
'character_sets_dir', 'D:\soft_work\mysql\share\charsets\'<br />
果然发现有几个不对的<br />
运行命令:SHOW VARIABLES LIKE 'collation_%'; 结果如下<br />
'collation_connection', 'utf8_general_ci'<br />
'collation_database', 'latin1_general_ci'<br />
'collation_server', 'latin1_general_ci'</p>
<p><span style="color: #000000">只要把那几个的编码改成utf8的,那应该就可以了.<br />
1:&nbsp;在Mysql的配置文件 my.ini里加上服务器的默认编码配置: default-character-set=utf8<br />
2:&nbsp;修改你的数据库的字符编码:进入Mysql数据库,通过命令修改你的数据库字符编码: <br />
ALTER DATABASE `databaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci&nbsp; <br />
(修改后需要重启Mysql数据库)<br />
3:&nbsp;如果你的表以及表里的字段使用了不正确的字符编码,同样需要修正过来:命令:<br />
&nbsp;修改表的编码：&nbsp;ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci<br />
&nbsp;修改字段的编码：&nbsp;ALTER TABLE `tableName` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL <br />
(做好了时,在看一下上面那两个查看字符编码的命令,看看是否全部都变成了utf8）<br />
把mysql数据库的编码改为utf8后，有试了一下程序，发现不在是乱码了，终于好了，<br />
总结，mysql的乱码有一下几个方面<br />
1，JSP设计页面上是中文，但运行时看到的是乱码，如果是这种情况，就要指定jsp页面的编码，默认情况下，jsp页面的编码是ISO-8859-1，解决方法就是在jsp页面的编码地方加入<br />
&lt;%@&nbsp;page&nbsp;language="<a href="http://www.busfly.cn/" target="_blank" tip="巴士飞扬技术博客,关注J2EE,Java开发思想,开发模式">java</a>"&nbsp;contentType="text/html;charset=utf8"&nbsp;%&gt;，<br />
2 ，当用Request对象获取客户提交的汉字时，会出现乱码，那么就需要在项目中加入filter了，（filter在tomcat中自带的有例子，可以照着例子改一下，也可以在googl中搜索一下）<br />
3，由于使用doget方法引起的乱码，可以试着使用dopost提交，<br />
或者是打开tomcat的server.xml文件，找到区块，加入如下一行：&nbsp; </p>
<p style="font-size: 9.75pt; margin: 0in; color: black; font-family: Arial; mso-outline-level: 1">URIEncoding=&#8221;GBK&#8221;&nbsp;</p>
<p style="font-size: 9.75pt; margin: 0in; color: black; font-family: Arial; mso-outline-level: 1">完整的应如下：&nbsp;<br />
&lt;Connector&nbsp;port="8080"&nbsp;maxThreads="150"&nbsp;minSpareThreads="25"&nbsp;maxSpareThreads="75"<br />
enableLookups="false"&nbsp;redirectPort="8443"&nbsp;acceptCount="100"&nbsp;debug="0"<br />
&nbsp;connectionTimeout="20000"&nbsp;disableUploadTimeout="true"&nbsp;URIEncoding="utf8"/&gt;<br />
需要重启tomcat，<br />
<br />
4，写入到数据库是乱码： <br />
如果你是通过JDBC直接链接数据库的时候，配置的代码如下：<br />
jdbc:mysql://localhost:3306/xxxxx<span style="color: #000000">?<span style="color: #ff0000">useUnicode=true&amp;characterEncoding=utf8</span></span>，<br />
这样保证到数据库中的代码是不是乱码。<br />
<br />
5，如按照上述步骤解决，写到数据库中的还是乱码，就要检查数据库，表的编码方式了，如果跟程序中的不一致，就要按照本文的介绍的方法修改数据库或者是表的编码了。</span></p>
<img src ="http://www.blogjava.net/f6k66ve/aggbug/314173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/f6k66ve/" target="_blank">askzs</a> 2010-03-01 15:52 <a href="http://www.blogjava.net/f6k66ve/archive/2010/03/01/314173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>