3 Stimmen

mysql-Zeichenkodierung

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 */

1voto

jabal Punkte 11447

Die Verbindungseigenschaften, die über die DBCP-Verbindungspool-Bean festgelegt wurden, wurden nicht als Anhängen an die JDBC-Url behandelt.

Also schließlich das Anhängen von ?characterEncoding=UTF-8&useUnicode=true zur Verbindungsurl half mir weiter.

-1voto

Surasin Tancharoen Punkte 4790

Wenn Sie Eclipe verwenden, haben Sie Ihre Kodierung überprüft:

  • Fenster -> Voreinstellungen -> Allgemein -> Arbeitsbereich
  • Rechtsklick auf das Projekt -> Eigenschaft -> Ressource

kann die Umstellung auf UTF-8 helfen.

Viel Glück!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X