Lỗi tiếng việt trong mysql

Mình đang làm một app quản lý viết bằng java swing, nhưng khi insert dữ liệu từ form dưới app vào mysql phpmyadmin thì trên mysql lại bị lỗi font. Ví dụ: Trường -> Tr??ng
Mình đã thử chuyển định dạng trên mysql sang utf8_unicode_ci, utf8_general_ci, uft8_vietnamese_ci,… và charset utf8 mà vẫn bị. Mong mọi người chỉ cho mình cách giải quyết, mình search đủ thử nơi và mọi cách rồi vẫn không được. Cám ơn mọi người
P/s: Mình kết nối mysql với app bằng thư viện JDBC.

mình cũng bị giống bạn, nhưng mình là về web. Mình sửa 2 method

        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

thì thành công. Ko biết swing có giống vậy ko?
Hi vọng giúp dc bạn

1 Like

Bạn debug xem khi submit form nó bị lỗi font hay khi insert vào db nó mới bị

SQL bạn chỉ cần để utf8_unicode_ci hoặc utf8_vietnamese_ci là được rồi, khác nhau chỉ ở cách so sánh và sắp xếp kí tự thôi.
Vấn đề chắc nằm ở code Java, bạn đưa code lên cái nào, mà lỗi trong mysql hay lỗi khi hiển thị trong sản phẩm?

1 Like

lỗi trong mysql khi mình đưa từ app lên, chứ khi mình thêm dữ liệu trực tiếp vào mysql và mình lấy về app thì ko bị gì

Cách đó mình có thử dòng dưới rồi bạn. còn dòng trên thì mình làm app nên chắc ko có

Thế là do app (do code của bạn) chứ còn gì nữa, bạn đưa code lên nào.

1 Like
 public void insertDataDeThi(int idQuantri, int idMonhoc,String ten
,String khuvuc, String dapan, int nam, int lan) throws SQLException
{
    String sql = "INSERT INTO dethi(id_quantri, id_monhoc, ten_dethi"
            + ", khuvuc_dethi, dapan_dethi, nam_dethi, lan_dethi)" + " VALUES('" + idQuantri + "','" + idMonhoc
            + "',N'" + ten + "',N'" + khuvuc + "','" + dapan + "','" + nam + "','" 
            + lan + "')";
 
    con.updataData(sql);
}

Đây là hàm insert vào database

   public void updataData(String sql) throws SQLException
{
    try
    {
        Statement stmt = (Statement) con.createStatement();          
        stmt.executeUpdate(sql);
        stmt.close();
       
    }
    catch(SQLException ex)
    {
       // JOptionPane.showMessageDialog(null, ex.getStackTrace());
    }
    
}

Đây là hàm thực thi câu lệnh

 private void btnThemActionPerformed(java.awt.event.ActionEvent evt) {                                        
    // TODO add your handling code here:
    
    Dethi dt = new Dethi();
    int idMonhoc = cbMonhoc.getSelectedIndex() + 1;
    String ten = null;
    String khuvuc = null;
    ten = txtTenDeThi.getText();
    khuvuc = new String(txtKhuVuc.getText().getBytes(), StandardCharsets.UTF_8);
    String dapan = txtDapAn.getText();
    int nam = Integer.valueOf(cbNam.getSelectedItem().toString());
    String monhoc = cbMonhoc.getSelectedItem().toString();
   
    try {
        spLan.commitEdit();
    }
    catch (java.text.ParseException e) {
        
    }
    int lan = (Integer) spLan.getValue();
    try {
        dt.insertDataDeThi(idUser, idMonhoc, ten, khuvuc, dapan, nam, lan);
        clearDataDeThi();
        showTableDeThi();
    } catch (SQLException ex) {
        Logger.getLogger(frmManager.class.getName()).log(Level.SEVERE, null, ex);
    } 
}                 

Và khi click vào button thì nó lấy các textfield đã nhập truyền vào hàm insertDataDethi

 public void connectSQL() throws ClassNotFoundException
{
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/onthidh", "root", "");
        con.setCharacterEncoding("utf-8");

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, ex.getMessage());
    }
}

Đây là hàm kết nối tới mysql

A post was split to a new topic: Lỗi khi chèn chuỗi Unicode vào MySQL

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?