mysql5.1汉字乱码

zhangsc 2010-10-15 11:25:33
使用mysql5.1,安装时使用默认的字符Latin1,由于这个数据库是公用的,所以配置不能改变
mysql> show variables like 'cha%';
+--------------------------+----------------------------------------------------
+
| Variable_name | Value
|
+--------------------------+----------------------------------------------------
+
| character_set_client | latin1
|
| character_set_connection | latin1
|
| character_set_database | latin1
|
| character_set_filesystem | binary
|
| character_set_results | latin1
|
| character_set_server | latin1
|
| character_set_system | utf8
|
| character_sets_dir | C:\MySQL\MySQL Server 5.1\share\charsets\
+--------------------------+----------------------------------------------------
+
8 rows in set (0.00 sec)

在test用户下创建games表,表的编码是采用默认的编码,现在使用JSP将汉字写入表中,发现汉字为???,由于Tomcat也是公用的,不能修改Tomcat的配置文件,JSP编码为UTF-8,代码如下:
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/test";
String user="root";
String password="123456";
String str1="东方不败";
String sql="insert into games(gamekey,title,content) values('A','"+str1+"','这是一个很好的电影')";
System.out.println(sql);
Statement stmt;
try{
Class.forName(driver);
}
catch(Exception e){
System.out.println("无法加载驱动程序"+driver);
}
try{
Connection con=DriverManager.getConnection(url,user,password);
System.out.println("数据库连接成功");
stmt=con.createStatement();
stmt.execute(sql);
}
catch(Exception e){
e.printStackTrace();
}
%>

尝试使用new String(str1.getBytes("ISO-8859-1"),"UTF-8")和new String(str1.getBytes("UTF-8"),"ISO-8859-1")来转换,结果表中还是乱码,这个问题研究了很久,还是找不到解决办法,有什么好的解决办法吗?谢谢!
...全文
635 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
closewbq 2010-10-18
这个问题,你已经提过了,不管数据库是不是公用的,首先你安装的时候就没有设置过编码问题,要是设置过就行了么。

开发一个系统,编码问题是首先要确定的东西,你现在编码格式不统一肯定要出问题了,还是和你头说,改数据库编码吧。就如我在你上个帖子回答的一样
回复
Achilles_Dynasty 2010-10-18
以下为综合网上的乱码问题,自己总结的一些方法。可以试一试,看有没有可以帮助你的。
MySQL插入中文乱码:
1.在配置文件中,如 c:\winnt\my.ini 中的 [mysqld] 里添加一行:
default-character-set=utf8
2.连接字符串里,的编码。
strURL = "jdbc:mysql://localhost:3306/hikdb?useUnicode=true&characterEncoding=utf-8";
3.数据库表编码,例如:
CREATE TABLE `hikdb`.`tb_user` (
`nLsh` int(10) unsigned NOT NULL auto_increment,
`UserName` varchar(64) NOT NULL,
PRIMARY KEY (`nLsh`)
) ENGINE = innodb DEFAULT CHARACTER SET utf8;
回复
magong 2010-10-18
你的意思是服务器一定要用latin1(也就是ISO-8859-1)。

那你只能降低对页面的要求,只能在页面中使用GB系列编码。用UTF是不行的,因为UTF会用低位编码,会和latin1编码冲突,引起编码转换丢失问题。

除此以外,你其他的理解都是对的。
回复
weinianjie1 2010-10-17
在select之前,先执行set names utf8
回复
apl330 2010-10-17
我也遇到了同样的问题。
我把数据库的编码成和JSP,通讯编码统一使用的GBK,然后直接用MYSQL客户端写入中文。
结果,我的JSP可以正常读取MYSQL里面的中文。
说明我的页面出现在写入数据库的时候,编码出现问题。
当希望通过编码过滤器过滤的时候,写入数据库的时候还是出现乱码。

new String(str.getBytes("ISO-8859-1"),"GBK");

将在DAO层将add()函数下的ps.setString(1, category.getName()) ;
改成
ps.setString(1, new String(category.getName().getBytes("ISO-8859-1"),"GBK")); 

可,还是出现乱码。。。。。。。。
回复
wshcdr 2010-10-17
全部改成 utf-8
回复
jumpheightway 2010-10-17
my.ini
文件里面将编码改成gbk
回复
apl330 2010-10-17
重新安装一次MYSQL就解决问题了。。。。。。。。。。。。。。。。。。。。
回复
wcc3672018 2010-10-17
数据库utf8,JSPutf-8
回复
voice1122 2010-10-16
从数据库读数据出来转码的基本步骤:
在JSP文件的开始处一般有这两行:
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />(这个在<head></head>标签里)

tomcat缺省的编码方式为iso-8859-1,读取汉字后可进行转换:
new String(str.getBytes("ISO-8859-1"),"GBK");

回复
CodeInMyLife 2010-10-16
以前使用 默认的字符的mysql 开发,虽然在mysql客户端显示为乱码,但用java读出来是好的。所以我觉得和mysql没关系。同意1楼的意见,因为tomcat的默认编码是iso-8859-1,所以可以用new String(str.getBytes("ISO-8859-1"),"GBK")或new String(str.getBytes("ISO-8859-1"),"GB2312")试试
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-10-15 11:25
社区公告
暂无公告