Per qualche strana ragione non riesco ad aggiungere dati UTF-8 al mio database MySQL. Quando inserisco un carattere non latino, viene memorizzato come ?????. Tutto il resto è memorizzato bene. Ad esempio, "questo è un esempio® ™" è memorizzato bene, ma "和 英 辞典" è memorizzato come "????".Impossibile memorizzare contenuto UTF-8 in MySQL utilizzando Java PreparedStatement
L'url collegamento è benissimo:
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;
}
sto usando PreparedStatement come ci si aspetterebbe, ho anche cercato di entrare "set nomi utf8", come qualcuno ha suggerito.
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) {
...
Il tavolo stesso sembra andare bene.
Default Character Set: utf8
Default Collation: utf8_general_ci
...
Field title:
Type text
Character Set: utf8
Collation: utf8_unicode_ci
ho provato inserendo in Unicode ("和 英 辞典" in particolare) attraverso un editor di GUI e quindi selezionando dal tavolo - ed è stato restituito bene. Quindi questo sembra essere un problema con JDBC.
Cosa mi manca?
Sei sicuro che 'title' ha il contenuto giusto? Forse lo leggi da un file usando ISO-qualunque? –
Sì, quando inserisco un breakpoint sul titolo posso vedere che è effettivamente unicode (es: 和 英 辞典) e non ???? – nostromo
'utf8' è una stringa, quindi racchiudila tra virgolette come:' "imposta nomi 'utf8'" '. Non scherzare con il set di caratteri. –