我是个初学者,各位高手帮帮忙。
java文件和数据库的字符集都是UTF-8,但是当我用java程序向MySQL数据库里的数据表插入数据时中文字符都变成问号了。网上都是说编码方式一样就没事了,可是我都换成GBK码也不行。这怎么解决?Java数据库乱码

解决方案 »

  1.   

    pps.setBinaryStream(9, new ByteArrayInputStream(string.getBytes("utf-8")));这样写试试
      

  2.   

    在数据库连接的后面也要加上utf-8 ,jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=UTF-8
      

  3.   

    首先,在发往数据库保存的最后一层进行一下输出,如果在发往数据库之前就已经是乱码了,那就和MySql没有关系,专注处理你的代码就好了。如果发往之前没有乱码,也就是在保存的时候出的问题,就得确定你发往数据库的数据的编码方式,建议先用String和Byte进行下转化,然后再发往数据库,两端编码一直即可。按照我的习惯的话,我喜欢都用utf-8
      

  4.   

    【问题补充】附上代码和结果,麻烦各位高手指点一下
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;public class InsertData { static Connection con;
    public static Connection getConnection() { //建立返回值为Connection的方法
    try {
    Class.forName("com.mysql.jdbc.Driver"); //加载数据库驱动
    System.out.println("数据库驱动加载成功");
    con = DriverManager
    .getConnection(
    "jdbc:mysql://localhost:3306/db_test1",
    "root", ""); // 获取数据库连接
    if (con != null) {
    System.out.println("数据库连接成功");
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return con; //按方法要求返回个Connection对象
    } /**
     * @param args
     */
    public static void main(String[] args) {
    con = getConnection(); // 调用数据库连接方法
    Statement statement;
    try {
    statement = con.createStatement(); // 获取Statement对象
    for(int i=0;i<3;i++){
    statement.execute("insert into tb_student(name,sex,age,salary)values('小红','女',24,5000)"); // 执行添加数据操作
    }

    System.out.println("student表的所有记录:");
    ResultSet res=statement.executeQuery("select * from tb_student"); //查询所有记录
    while(res.next()){
    int id=res.getInt("id");
    String name=res.getString("name");
    String sex=res.getString("sex");
    int age=res.getInt("age");
    int salary=res.getInt("salary");
    System.out.println("id:"+id+"\t姓名:"+name+"\t性别:"+sex+"\t\t年龄:"+age+"\t\t工资:"+salary);
    }
    //关闭连接
    res.close();
    statement.close();
    con.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }

    }}
      

  5.   

    加上这个就解决了。jdbc:mysql://127.0.0.1:3306/databaseName?useUnicode=true&characterEncoding=utf8
    谢谢谢谢各位