mysqljsp网站开发解决中文乱码.docx
《mysqljsp网站开发解决中文乱码.docx》由会员分享,可在线阅读,更多相关《mysqljsp网站开发解决中文乱码.docx(21页珍藏版)》请在冰点文库上搜索。
![mysqljsp网站开发解决中文乱码.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/0390f03c-a842-4368-920b-b78032d43edd/0390f03c-a842-4368-920b-b78032d43edd1.gif)
mysqljsp网站开发解决中文乱码
MySql/Jsp/网站开发中的中文乱码解决方案
这段时间在学习SSH在Myeclipse8.5+MySQL5.1下进行网站开发时遇到了中文乱码问题.烦恼了很久终于解决了…在这里和有同样问题的朋友们分享一下.希望能有帮助.总的思路就是将所有字符编码统一为GBK编码,开始的时候打算统一为utf-8,可是一直没有成功,饥不择食了.现在先用GBK,以后再研究utf-8的方法…具体步骤如下:
1)MySQL编码配置
1.为确保配置的成功.请在MySQL字符编码配置完成之后再create所需的数据库和表.
2.打开MySQL的配置向导
打开后如下图:
3.一直点next选择默认到达字符集选择界面,选中第三项:
manualselecteddefaultcharacterset/collation,然后在下拉框中选择gbk如下图:
4.选择之后点击next,填写密码并勾选enablerootaccessfromremotemachines.如下图
5.然后点击execute执行刚才的设置,运行成功之后到服务中重启MySQL服务即可,完成前面的步骤之后就可以建数据库.建表了
2)然后在MyEclipse中配置jsp页面的默认编码具体步骤如下:
1.选择菜单栏的:
windowpreferences,如下
2.点击MyEclipseFilesandEditorsJSP,如下图
在Encoding中选择ChineseNationStandard,也就是GB18030,因为它是GBK的子集而在选项中没有找到GBK就用它代替了.然后点击OK
3.新建webprojectsample…
4.此时新建webproject的jsp文件内都有<%@pagelanguage=”java”import=”java.util.*”pageEncoding=”GB18030”%>
3)然后是添加filter转换编码,具体步骤如下:
1.选中webproject,右键:
MyEclipseAddstrutscapabilities.如图
2.选择struts2.1,URLpattern选择/*如图
3.打开src目录下的struts.xml文件添加
4)测试网页到action的正确
1.在刚才工程的index.jsp中添加如下代码
2.在src下添加classTest,修改内容如下
3.在struts.xml文件中配置action如下
4.现在选中项目sample.右键runasMyEclipseServerApplication,在首页表单中输入中文.如你好..将在屏幕下方打印出:
你好
5.成功…
5)搭建Hibernate环境测试action到数据库
1.在MySQL中创建数据库hello,选择数据库hello,然后创建表user如图
2.选中sample.右键buildpathaddexternalachieves,找到下载到本机的mysqljdbc驱动
3.选中sample,右键:
MyEclipseaddHibernatecapabilities出现设置界面如图
选中enableHibernateAnnotationSupport.其他保持默认即可,点击next
4.接着next填写数据库相关信息如下图,点击Next
5.不选择创建SessionFactory,直接finish
6.Hibernate的配置就完成了.
6)将网页传输的中文保存到数据库
1.在src下添加classUser内容和数据库表结构相同,并添加annotation信息,如图
2.在hibernate.cfg.xml文件中添加实体映射
3.修改classTest中的execute方法如下
4.运行sample….runasMyEclipseServerApplication
5.在表单中输入你好.点击提交.console中打印出你好.查看数据库
7)总结:
在做这个文档的时候我也因为粗心弄错了好多次.有时候是字母打错了..有时候是驱动没添加…总之就是细心一点.不要随便放弃………希望能帮助遇到同样问题的朋友.因为我也是菜鸟阶段..所以没有去考虑别的解决方案.我照着我的文档试验了2次,都成功解决了乱码问题.我用的环境是:
MySQL5.1+MyEclipse8.5如果实在不能解决..那就把软件的版本和我统一试试吧…还要提一点就是.我在学习ssh的时候使用的是尚学堂/马士兵的视频教程.感觉收获非常大.建议和我同样的新手去电驴里面搜索一下.呵呵废话多了些…
Mysql中文乱码的解决方法
第一种方法,很精辟的总结:
经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧:
WINDOWS下导入应该这样:
使用MYSQL的命令。
在DOS命令下进入mysql的bin目录下,输入mysql-uroot-p密码数据库名称(要恢复的数据库),例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样:
mysql-uroot-p密码test2。
以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。
只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SETNAMESUTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SETNAMESGBK,代码如下:
$mysql_mylink=mysql_connect($mysql_host,$mysql_user,$mysql_pass);
mysql_query("SETNAMES'GBK'");
数据库字符集为utf-8
连接语句用这个
mysql_query("SETNAMES'UTF8'");
mysql_query("SETCHARACTERSETUTF8");
mysql_query("SETCHARACTER_SET_RESULTS=UTF8'");
还有个方法就是,如果你自己的机器的话,可以更改MYSQL字符集,一般在MYSQ4和MYSQL5这两个版本中有效。
第二个方法:
很不错的解说,可以试一下
mysql乱码处理总结:
(1)java中处理中文字符正常,在cmdclient中显示乱码是字符集的问题.
(2)字段长度设置够长,但插入中文字符时提示com.mysql.jdbc.MysqlDataTruncation:
Datatruncation:
Datatoolongforcolumn错误是字符集的问题.
(3)乱码问题归根到底是字符集的问题,那就从字符集设置方面考虑,不外乎下面几个方面:
server,client,database,connection,results.
-------------------------解决办法----------------------
(1)修改my.ini(MySQLServerInstanceConfiguration文件)
#CLIENTSECTION//客户端
[client]
port=3306
[mysql]
default-character-set=gbk
#SERVERSECTION //服务端
[mysqld]
default-character-set=gbk
(2)修改data目录中相应数据库目录下的db.opt配置文件
default-character-set=gbk
default-collation=gbk_chinese_ci
(3)数据库连接串中指定字符集
URL=jdbc:
mysql:
//yourIP/college?
user=root&password=yourPassword&useUnicode=true&characterEncoding=gbk注:
在mysql4.1.0版要加useUnicode=true&characterEncoding=gbk如果是5.0版以上的,加不加都是没有关系的!
(4)在创建数据库时指定字符集
createdatabaseyourDBCHARACTERSETgbk;
(5)在dos命令上要设置
setnamesgbk
好了,经过检查上面四个方面的设置,应该OK了!
不会出现诸如com.mysql.jdbc.MysqlDataTruncation:
Datatruncation:
Datatoolongforcolumn等问题.
第三种方法,说有太复杂了,反到不知道怎么弄了,你试试,也许可以用得上
1.修改/etc/f文件,改成这样:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
注意:
就是加入了一句default-character-set=utf8。
2./etc/init.d/mysqldrestart重新启动mysql;
3.打开phpmyadmin,选择lang为"Chinessimplifies(zh-utf-8)",选择"MySQL连接校对"为"utf8_general_ci"点“显示MySQL的运行信息”--“变量”,可以看到:
charactersetclientutf8utf8
charactersetconnectionutf8utf8
charactersetdatabaseutf8utf8
charactersetresultsutf8utf8
charactersetserverutf8utf8
charactersetsystemutf8utf8
collationconnectionutf8_general_ciutf8_general_ci
collationdatabaseutf8_general_ciutf8_general_ci
collationserverutf8_general_ciutf8_general_ci
从这里可以看到character全部变成utf8了。
有人要问,为什么都要改成utf8呢?
改成GB2312不行吗?
解释如下:
我也不想改成utf8,只是phpmyadmin2.6在mysql4.1的时候只会用utf8,连其他页面的charset也都是utf8,改成gb2312一定会乱码,我们只能凑phpmyadmin了。
只有在mysql3.23的时候,phpmyadmin才会多一个gb2312的页面charset,这时候是正常的。
将以前的mysql3的库文件导入mysql4.1的库
有两种情况:
一是从phpmyadmin上导入,这时候你要注意的是在选择库文件的页面左下脚有个“文件的字符集:
”,默认是utf8,要改成gb2312,否则导进去乱码;
二是在linux下导入,这时候你需要先在库文件的头部加一行:
SETNAMES'gb2312';注意最后也是;号,别漏了。
然后执行mysql-u用户名-p密码xxx.sql>库名
导入完成以后再用phpmyadmin打开看,里面的中文字就是正确的。
4.从mysql4.1里导出库文件
一.用phpmyadmin导出
导出倒是问题不大,如果phpmyadmin的浏览页面里显示的中文是正常的,那么导出肯定也是正常的
二.在linux上导出
如果用mysqldump导出出现了乱码也没有关系,可以运行iconv来转换一下iconv-c-fUTF-8-tGB2312库文件名>新的gb2312的库文件名。
综上所述,你要注意:
1。
尽量在需要导入的库文件的开头加入SETNAMES'gb2312';告诉mysql你要导入的是一个gb2312的文件;
2。
可能你需要这个:
SETNAMES'utf8';
在登陆到mysql后用,把character的一些默认参数改到utf8上,有时可以减少一些困扰,不过也不是必须的。
在mysql上使用:
SHOWVARIABLESLIKE'character_set_%';
用来查看当前的状态。
2.如果出现乱码也不要怕,一是你要注意留存原有的备份,二是用iconv来进行转化。
在正常使用之前注意做导入导出的测试,确保万无一失。
最后加一句:
www.quicklinux.org原创文章,转载请注明出处。
呵呵
邮件:
support@quicklinux.org
作者:
MySQL发布日期:
2005-12-14
我升级了MYSQL到4.1.2,phpmyadmin用的是2.6.2。
数据表里面有中文的字段中文都变成了乱码,导出数据也是乱码。
我用以前的2.5.7没有问题,想问一下,应该在phpmyadmin的那个文件里改哪个设置一下才能显示出来的是正常的中文字?
和字符相关的变量中这几个和sql很有关系:
character_set_client
character_set_connection
character_set_results
此外就是数据库中对相应字段设置的charactset,如果没有对字段设置,缺省是table的charactset,table也没有指定则缺省使用database的。
上面3个变量的作用是这样的,client表示客户端发送过来的字符集,results表示发送到客户端的字符集(这两个分开是因为发送过来和发送过去的不一定是同一个客户端),connection则在客户端和数据库起一个连接作用。
具体是这样:
比如我在mysql命令行设置client为gbk,connection为utf8,results为gbk,数据库为big5,
当我发送一个insert语句的时候,这个语句作为gbk代码,先转为utf8代码(connection),再转为big5(database)插入数据库。
而运行一个select语句的时候,从数据库得到的结果则相反的过程,由big5转为utf8,再转为gbk,你得到gbk的结果。
因此最主要的是让client和results和你使用的客户端一致。
比如你的网页是utf8编码,你就要设置这两个为utf8。
而在mysql命令行的时候,我用的是2000,需要设置为gbk
而我们用的setnamesXXX,实际上就是同时设置这3个变量为XXX。
在这样的情况下,我们可以把一个数据库中的不同表或不同字段设为不同的字符集,只要上面3个设置正确,就可以在数据库中同时使用不同的字符集。
注意要保证你的数据库中的字符已经使用了正确的字符集,比如如果一开始你设置错误,插入数据后,本身数据的编码就是不正确的,然后即使设置改回来,也不可能得到正确的显示了。
Jsp向Mysql表中添加中文文字乱码报错解决方案
1.首先设置页面charset=gb2312和<%request.setCharacterEncoding("gb2312");%>
保证要所用提交页面格式为gb2312,如果只操作这一步,在控制台打印提交数据有可以出现乱码情况,必须添加下面配置
2.创建Filter类,配置web.xml。
创建一个名为txtFilter类,实现Filter接口,用来设置页面代码格式
packagecom.rongtianxinxijishu.book.util;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclasstxtFiterimplementsFilter{
publicvoiddestroy(){
//TODOAuto-generatedmethodstub
}
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,
FilterChainarg2)throwsIOException,ServletException{
//TODOAuto-generatedmethodstub
//主要步骤如下
HttpServletRequestreq=(HttpServletRequest)arg0;
HttpServletResponseres=(HttpServletResponse)arg1;
req.setCharacterEncoding("gb2312");
res.setCharacterEncoding("gb2312");
arg2.doFilter(req,res);
}
publicvoidinit(FilterConfigarg0)throwsServletException{
//TODOAuto-generatedmethodstub
}
}
txtFilter类创建好后,接着配置web.xml
txtfilter
com.rongtian.book.util.txtFiter
txtfilter
/*
配置完成后,重新部署,在控制台打印数据,发现中文没有乱码现象。
但在提交mysql后,mysql表中数据为乱码,需要接下来的操作。
3.在mysql里面配置下。
在你要修改的字段,选择gb2312,不要使用utf8,在mysql中,utf8会出现中文乱码。
在你的数据库中,执行如下代码。
ALTERTABLE你的表名CHARACTERSETgb2312;
在mysql的安装目录下你找到my.ini这个文件找到一行
default-character-set-latinl;
把latinl改成你的gb2312。
重启服务器删除缓存数据。
这样,中文数据从页面到数据库不会出现乱码情况。