Vì một số lý do lạ tôi dường như không thể thêm dữ liệu UTF-8 vào cơ sở dữ liệu MySQL của mình. Khi tôi nhập một ký tự không phải latin, nó được lưu dưới dạng ?????. Mọi thứ khác được lưu trữ tốt. Vì vậy, ví dụ, "đây là một ví dụ ® ™" được lưu trữ tốt, nhưng "和 英 辞典" được lưu trữ là "????".Không thể lưu trữ nội dung UTF-8 trong MySQL Sử dụng Java PreparedStatement
Url kết nối là tốt:
private DataSource getDB() throws PropertyVetoException {
ComboPooledDataSource db = new ComboPooledDataSource();
db.setDriverClass("com.mysql.jdbc.Driver");
db.setJdbcUrl("jdbc:mysql://domain.com:3306/db?useUnicode=true&characterEncoding=UTF-8");
db.setUser("...");
db.setPassword("...");
return db;
}
Tôi đang sử dụng PreparedStatement như bạn mong đợi, tôi thậm chí đã cố gắng vào "đặt tên utf8" như ai đó đề nghị.
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = db.getConnection();
stmt = conn.prepareStatement("set names utf8");
stmt.execute();
stmt = conn.prepareStatement("set character set utf8");
stmt.execute();
... set title...
stmt = conn.prepareStatement("INSERT INTO Table (title) VALUES (?)");
stmt.setString(1,title);
stmt.execute();
} catch (final SQLException e) {
...
Bản thân bảng có vẻ ổn.
Default Character Set: utf8
Default Collation: utf8_general_ci
...
Field title:
Type text
Character Set: utf8
Collation: utf8_unicode_ci
Tôi đã thử nghiệm bằng cách nhập vào Unicode ("和 英 辞典") thông qua trình chỉnh sửa GUI và sau đó chọn từ bảng - và nó đã được trả lại tốt. Vì vậy, điều này có vẻ là một vấn đề với JDBC.
Tôi đang thiếu gì?
Bạn có chắc chắn rằng 'tựa đề' có nội dung phù hợp không? Có lẽ bạn đọc nó từ một tập tin bằng cách sử dụng ISO-bất cứ điều gì? –
Có, khi tôi đặt một điểm ngắt trên tiêu đề tôi có thể thấy rằng nó thực sự unicode (ví dụ: 和 英 辞典) và không ???? – nostromo
'utf8' là một chuỗi, do đó, kèm theo nó trong dấu ngoặc kép như:' "set names 'utf8'" '. Đừng gây rối với bộ ký tự. –