java(jsp)使用MySql数据库,中文乱码的完整解决方案
java(jsp)使用MySql数据库,中文乱码的完整解决方案
mysql是一个小型的开源的数据库,用来自学一些技术是十分方便的。但使用mysql存储数据,也会遇到一些非常恶心的问题,如:中文乱码问题、java驱动程序无法使用的问题(已经解决,详见:http://hi.baidu.com/lauo1988/blog/item/ff0da655bd3e2eceb745ae0b.html)。
对于中文乱码问题。网上搜索得到的解决方案比较多,主要还是设置mySql的配置文件。这些都比较麻烦,但是设置成功的话,的确能够一劳永逸。但我尝试了很多次网上的方法,都不能很好的解决这个问题。乱码依然存在。想想,要做网站的话,用mySql数据库存放数据,中文都不能很好支持的话,做这东西是没有用的!
最终,我按照:将中文字字符串,按照无损编码的方式,对其进行编码,然后直接存于数据库中。当要取出数据时,再将中文字符串解码。这样可以达到存储中文字符串,又不会产生乱码的目标。
我在网上找到了一些无损编码的方式,详见:http://www.cnblogs.com/qiren5761/articles/523790.html
我采用了里面的:“String-GBK〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-GBK〉String
”的编码/解码方式。
主要的java处理函数如下:
/*
*完成从gbk编码到ISO-8859-1的转换
*/
public static
String encode(String str)
{
if(str==null||str.equals("")) return
str;
try
{
return new
String(str.getBytes("gbk"),"ISO-8859-1");
}
catch(Exception e){
e.printStackTrace(); return str;}
}
/*
*从ISO-8859-1恢复gbk编码
*/
public static String
decode(String str)
{
if(str==null||str.equals("")) return str;
try
{
return new String(str.getBytes("ISO-8859-1"),"gbk");
}
catch(Exception e){ e.printStackTrace(); return
str;}
}
当然,对于sql操作,不管是插入还是查询,sql语句必需先经过encode函数编码,然后得到的查询结果使用decode,可以恢复到需要的中文字串。举例如下:
/*
*获得用户的描述信息
*/
public String[]
getUserInfo(String uid)
{
if(uid==null||uid.equals("")) return
null;
try
{
相关文档:
Java学习从入门到精通
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......
Java NIO API详解
在JDK
1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API。对于大多数应用来说,这样的API使用很方
便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK 1.4起,NIO
API作为一个基于缓冲区,并能提供非阻塞(non-blo ......
这几天我日日看到书客网以为是什么东西,我去看了一下子,原来是开发文件等等的下载,还要登记,有些烦,我把我刚下的java代码大全和java23种设计方式给分享
也把网站贴出来
呵呵仍是支持一下子分享精力
http://www.8211.cn
大家收益了我可还来一个
隐藏帖 (16)
java代码大全.pdf (5 MB)
下载次数: 2185 ......
背景:某个系统的mysql数据库dnname采用默认的latin1字符集,系统升级需要将所有数据转换成utf-8格式,目标数据库为newdbname(建库时使用utf8)
方法一:
步骤一 命令行执行:mysqldump --opt -hlocalhost -uroot -p*** --default-character-set=lantin1 dbname > /usr/local/dbname.sql
步骤二 将 dbname.s ......
java使用Math类,php使用系统函数
ceil功能 大于等于某数(常用于分页页数计算)
php中:ceil(a/b)
java中:(int)Math.ceil((double)a/b)) Math.ceil在java中需要传入double型,而返回也是double型。注意这里用(double)a/b才可以。
a/b,(dobule)(a/b)都不行。因为他们会先自动舍弃小数取得整数
flooe ......