使用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")来转换,结果表中还是乱码,这个问题研究了很久,还是找不到解决办法,有什么好的解决办法吗?谢谢!
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")来转换,结果表中还是乱码,这个问题研究了很久,还是找不到解决办法,有什么好的解决办法吗?谢谢!
在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");
我把数据库的编码成和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"));
可,还是出现乱码。。
文件里面将编码改成gbk
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;