Ich habe einen MySQL-Server mit den folgenden Einstellungen:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
Ich habe einen Java-Client, der eine Verbindung zu dieser Datenbank über DBCP mit dieser Konfiguration herstellt:
<bean id="dsJoomla" class="hu.eutrust.wsfresh.CustomDataSource">
<property name="driverClassName" value="${joomla.db.driver}"/>
<property name="username" value="${joomla.db.user}"/>
<property name="password" value="${joomla.db.pass}"/>
<property name="url" value="${joomla.db.url}"/>
<property name="connectionProperties" value="characterEncoding=UTF-8;useUnicode=true;"/>
</bean>
Dann führe ich irgendwo im Code eine Aktualisierung wie diese durch:
template.update("insert into test (nev) values (:nev)", new MapSqlParameterSource("nev", "Árvízturo"));
Nachdem ich die Ergebnisse in phpMyAdmin überprüft habe, sehe ich eine Zeile:
ID NEV
2 Árvízt?r?
Die Zeichen o und u, die nicht im latin1-Satz enthalten sind, sind schlecht. Ich vermute, das liegt daran, dass der character_set_server latin1 ist. Mit phpMyAdmin kann ich den Datensatz jedoch manuell bearbeiten und "Árvízturo" eingeben, woraufhin der Datensatz korrekt ist. Ich nehme also an, dass es möglich ist, den gewünschten Wert mit diesen Einstellungen in die Datenbank einzugeben. Wie kann ich das mit meinem Java-Client machen? Wie muss ich die Verbindung konfigurieren? Warum sind meine o- und u-Zeichen falsch, wenn die Verbindung 100% utf8 ist?
show create table Testausgabe ist:
CREATE TABLE `test` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`NEV` varchar(64) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
show create database joomla Ausgabe ist:
CREATE DATABASE `joomla` /*!40100 DEFAULT CHARACTER SET utf8 */