Home Forum Nuclos Entwicklung Schnittstellen Datenübernahme UTF-8

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #3266
    Jan Giebels
    Teilnehmer

    Hallo,
    wir haben auf einem Server zwei Datenbanken laufen, MySQL und PostgreSQL. In Nuclos haben wir eine Datenübernahme von MySQL -> Postgresql implementiert.

    Leider werden sämtliche Umlaute bei der Datenübernahme zerstört (unleserlich). Daraufhin haben wir geprüft, mit welchen locale die Datenbanken und der Server eingestellt sind.

    Server:
    LANG=de_DE.UTF-8
    LC_CTYPE=“de_DE.UTF-8″
    LC_NUMERIC=“de_DE.UTF-8″
    LC_TIME=“de_DE.UTF-8″
    LC_COLLATE=“de_DE.UTF-8″
    LC_MONETARY=“de_DE.UTF-8″
    LC_MESSAGES=“de_DE.UTF-8″
    LC_PAPER=“de_DE.UTF-8″
    LC_NAME=“de_DE.UTF-8″
    LC_ADDRESS=“de_DE.UTF-8″
    LC_TELEPHONE=“de_DE.UTF-8″
    LC_MEASUREMENT=“de_DE.UTF-8″
    LC_IDENTIFICATION=“de_DE.UTF-8″

    MySQL DB:
    utf8 — UTF-8 Unicode

    PostgrSQL DB:
    UTF8

    Woran kann es noch liegen, das Umlaute bei der Migration nicht richtig konvertiert werden?

    Danke und Gruß

    Jan

    #3276
    Robert Mair
    Teilnehmer

    Hallo,

    haben Sie denn noch genauere Informationen für uns, in wie fern Sie in Nuclos die Datenübernahme von MySQL zu PostgreSQL bewerkstelligt haben?

    Oder ist hier ein spezielles Tool zum einsatz gekommen?

    Grüße
    Robert

    #3277
    Jan Giebels
    Teilnehmer

    Hallo,
    wir haben eine Bean definition angelegt unter: …./WEB-INF/classes/META-INF/nuclos/MySQL-beans.xml. Diese sieht wie folgt aus:

    Dazu haben wir dann eine Bibliotheksregel entworfen die in den entsprechenden Fristenregeln genutzt wird (einfache Selects, etc.).


    import java.util.Collection;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import javax.sql.DataSource;

    public class ShopSync {

    private DataSource ds = (DataSource)org.nuclos.server.SpringApplicationContextHolder.getApplicationContext().getBean("shopDS");
    private Connection c;
    private PreparedStatement pstmt;
    private ResultSet rs;
    private ResultSetMetaData rsmd;

    public HashMap getData(String sTable, String sIdfield, String sValue, String sOptionalWhere) {
    HashMap mapResult = new HashMap();
    try {
    c = ds.getConnection();
    pstmt = c.prepareStatement("SELECT * FROM "+sTable+" WHERE "+sIdfield+"= ? "+sOptionalWhere);
    pstmt.setString(1, sValue);
    rs = pstmt.executeQuery();
    rsmd = rs.getMetaData();
    int n, nmax = rsmd.getColumnCount();
    if (rs.next()) {
    for( n=1 ; n<=nmax ; n++ ) {
    String sColumnType = rsmd.getColumnTypeName(n);
    String sConame = rsmd.getColumnName(n);
    if (sColumnType.equals("FLOAT") || sColumnType.equals("DECIMAL")) {
    mapResult.put(rsmd.getColumnName(n), rs.getDouble(n));
    } else if (sColumnType.equals("INT") || sColumnType.equals("TINYINT")) {
    mapResult.put(rsmd.getColumnName(n), rs.getInt(n));
    } else if (sColumnType.equals("DATETIME")) {
    mapResult.put(rsmd.getColumnName(n), rs.getDate(n));
    } else {
    mapResult.put(rsmd.getColumnName(n), rs.getString(n));
    }
    }
    }
    rs.close();
    c.close();
    }
    catch (SQLException ex) {
    System.out.println(ex);
    }
    return mapResult;
    }
    }

    In den Fristenregeln holen wir dann die Daten über die Bibliotheksregel und schreiben diese in die Nuclos DB.

    Gruss

    Jan

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)