按照网上提供的方法,Eclipse编码设置为:
1、windows->Preferences->general->Workspace,右侧Text file encoding,选择Other,改变为UTF-8
2、windows->Preferences->general->Content Types->Context Types->Text,选择Java Source File,在下面的Default encoding输入框中输入UTF-8,点Update
这样就统一了Eclipse的编码都是UTF-8MySql里面的数据库以及数据库里面的表的字段都是统一设置成的UTF8,现在的问题是:如果不通过控制台,直接在代码里面写sql语句,虽然有中文,但是可以直接向MySql里面写中文数据。但是如果程序从控制台读中文数据,然后发送到MySql里面之后是乱码了,这事为什么呢?代码如下:
import java.sql.*;
import java.util.Scanner;
public class TestSql {
private static  Connection getConnection()throws SQLException{
Connection conn=null;
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mytestdb?useUnicode=true&characterEncoding=UTF-8",
"root","iso9001");
return conn;
}

public static void input1(){
Connection conn=null;
Statement st=null;
String str="insert into mytest values('测试')";
try {
conn=getConnection();
st=conn.createStatement();
st.executeUpdate(str);
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if(st!=null) st.close();
if(conn!=null) conn.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
} public static void input2(){
Connection conn=null;
PreparedStatement pst=null;
try {
conn=getConnection();
pst=conn.prepareStatement("insert into mytest values(?)");
Scanner scr=new Scanner(System.in);
String str=scr.next();
pst.setString(1,str);
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if(pst!=null) pst.close();
if(conn!=null) conn.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
input1();//正常
input2();//乱码
}
}

解决方案 »

  1.   

    说明使用Scanner得到的字符串已经变成乱码了,你又把乱码加到数据库,所以数据库..
    加一条:scr = new String(scr.getBytes("iso-8859-1"),"utf-8");
      

  2.   

    String str=scr.next();
    str=new String(str.getBytes("ISO-8859-1"),"GB2312");
      

  3.   

    String str=scr.next();
    pst.setString(1,str);
    中间加上一句:打印出str:
    String str=scr.next();
    System.out.println(str);
    pst.setString(1,str);
    如果str是乱码,当然保存到数据库中也是乱码;
    然后再
    String str=scr.next();
    str=new String(str.getBytes("ISO-8859-1"),"GB2312");
    不断测试
    乱码问题实在是令人头痛  慢慢弄  总会有解决方法的
      

  4.   

    在控制台运行的程序,必须指定编译为UTF-8的,然后在控制台里输入的数据才会是UTF-8的
    javac -encoding UTF-8 Test.javaEclipse有点奇怪,即使工程是UTF-8的,但是编译出来的程序并不是使用UTF-8去编译,好像是使用系统编码去编译的,因为这种情况我就遇到过,在Eclipse里UTF-8的工程,编译在Eclipse里运行,使用Eclipse的控制台输入的中文也是正常的,但是一到终端里使用,输入输出的中文都不对劲了,后来在终端里指定UTF-8编码再编译后在终端里运行中文就正常了