INSERT dữ liệu tiếng việt vào MySQL bi lỗi font giúp mình với.

Lê Văn Quyền

New Member
7/2/13
6
0
1
31
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/quanlythuoc", "root", "");
}catch (Exception e) {
JOptionPane.showMessageDialog(null, "Lỗi Kết Nối Driver!");
}

try{
Statement stmt = con.createStatement();
String sql = "INSERT INTO danhmucthuoc VALUES ( "+ ids +",'"+ tenthuoc +"',"+ txtdongia.getText() +",'"+ cmbdv.getSelectedItem().toString() +"'," + tieuhao +","+baohiem+")";
stmt.executeUpdate(sql);
stmt.close();
}catch (SQLException e) {
e.printStackTrace();
}

đây là code mình dùng nó đề INSERT môt dòng du liệu vào bảng danhmucthuoc

CREATE TABLE IF NOT EXISTS `danhmucthuoc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tenthuoc` text COLLATE utf8_unicode_ci NOT NULL,
`dongia` double NOT NULL,
`donvi` text COLLATE utf8_unicode_ci NOT NULL,
`tieuhao` int(11) NOT NULL,
`baohiem` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16 ;

ví dụ như donvi mình thêm lá 'lọ' thì nó thành 'l?'. hay tên thuốc là 'băng cá nhân' thì nó là 'b?ng cá nhân'

rốt cuộc thì code mình bị làm sao vậy.
 

Joe

Thành viên VIP
21/1/13
2,736
1,256
113
Hello Le Van Quyen,

ví dụ như donvi mình thêm lá 'lọ' thì nó thành 'l?'. hay tên thuốc là 'băng cá nhân' thì nó là 'b?ng cá nhân'
If you know that we, Westerner, have UNICODE that covers all our letters. Default character set of JAVA is ISO-8859-1. Vietnamese character set is larger than ours and is an extension of our unicode. You problem lies in the contruction of the string sql.
Code:
// see how is the default character set
System.out.println("Default CharacterSet is: "+ Charset.defaultCharSet());
//
String sql = "INSERT INTO danhmucthuoc VALUES ( "+ ids +",'"+ tenthuoc +"',"+ txtdongia.getText() +",'"+ cmbdv.getSelectedItem().toString() +"'," + tieuhao +","+baohiem+")";
// should be
String vietCharacterSet = "ISO-????"; // I don't know, you check it for yourself
String sql = new String(("INSERT INTO danhmucthuoc VALUES ( "+ ids +",'"+ tenthuoc +"',"+ txtdongia.getText() +",'"+ cmbdv.getSelectedItem().toString() +"'," + tieuhao +","+baohiem+")").getBtytes(), vietCharacterSet);
More: See the contructions of the String Class
Joe
 

Lê Văn Quyền

New Member
7/2/13
6
0
1
31
Bạn thấy như vậy khi xem nội dung ở chương trình hay console hay mysql query browser
chào bạn. khi nó bị như vậy khi mình chạy chương trình khi mình INSERT bằng chương chình thì bị lỗi font còn khì vào phpmyadmin mà INSERT thì ko bị lỗi font.

HI JOE

thank you.

thông cảm tiếng anh mình hơi kém nhưng mình cũng độc đc chút ít ý bạn là CharacterSet mặc định của java là ko hộ trợ tiềng việt phải không.

vậy cho minh hỏi CharacterSet của việt nam mình là gi thế. đẻ mình test thử cái.
 

Lê Văn Quyền

New Member
7/2/13
6
0
1
31
minh cho cac bạn một tấm hình. mình copy dòng sql dưới tấm loi1.jpg chạy trong phpmyadmin thì ok nhưng chạy trương trình cho nó insert thì bị lỗi giống hình loi2.jpg

loi1.jpg

loi2.jpg
 

Joe

Thành viên VIP
21/1/13
2,736
1,256
113
Good morning Le
thông cảm tiếng anh mình hơi kém nhưng mình cũng độc đc chút ít ý bạn là CharacterSet mặc định của java là ko hộ trợ tiềng việt phải không.
vậy cho minh hỏi CharacterSet của việt nam mình là gi thế. đẻ mình test thử cái.
..and I apologize for my writing in English. I do understand Vietnamese but can't master the art of writing:(

Well, as you see, your default CharacterSet is UTF-8. That means you run US ASCII Character set of 8 bits. So far I know Vietnamese, Chinese and all other Asian character sets are UTF-16 or UTF-32.
Pls. read this site carefully:
http://vietunicode.sourceforge.net/main.html
http://vietunicode.sourceforge.net/howto/
and find for yourself what character set your language uses: UTF-16 or UTF-32
Good luck
Joe
 
  • Like
Reactions: kekedaine

Joe

Thành viên VIP
21/1/13
2,736
1,256
113
...I almost forget. When you find out what character set you have you can set it as your default like this
Code:
System.setProperty("file.encoding","UTF-16"); // or UTF-32
// or
String sql = new String(("INSERT INTO ...( "+...+")").getBtytes(), "UTF-16");
 

vtcNew

Active Member
8/10/11
252
60
28
Với câu lệnh insert bạn thêm N' vào trước mỗi thuộc tính thì sẽ hết .
( có trường hợp ko cần thêm mà vẫn ko bị lỗi font )
 

ce_itcn

Moderator
30/3/11
102
18
18
Mình vẫn dùng tiếng việt vào mysql bình thường. Có 2 chỗ mà mình nghĩ bạn bị như vậy, lỗi thứ nhất bạn insert trong phpmyadmin vẫn được thì mình loại còn thứ 2 từ java vào thì bạn phải sửa lại chuỗi kết nối thế này nhé
database_url = "jdbc:mysql://localhost/Ten_cua_database?useUnicode=true&characterEncoding=UTF-8";
 

toanzoom

Member
9/11/11
115
1
18
găm hàng nào hiện tại đang sở dụng sql server nhưng sẽ có lúc đụng đến
 

Lê Văn Quyền

New Member
7/2/13
6
0
1
31
cam ơn các bạn rất nhiều. giờ mình mới đụng đc vào máy. mấy ngày tết thiệt là mệt. để mình coi lại hihi.