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.
Lỗi tiếng việt trong mysql
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
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?
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.
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