Home › Forum › Nuclos Entwicklung › Schnittstellen › Datenübernahme UTF-8
- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre, 3 Monaten von
Jan Giebels.
-
AutorBeiträge
-
24 Februar 2011 um 15:50 Uhr #3266
Jan Giebels
TeilnehmerHallo,
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 UnicodePostgrSQL DB:
UTF8Woran kann es noch liegen, das Umlaute bei der Migration nicht richtig konvertiert werden?
Danke und Gruß
Jan
24 Februar 2011 um 18:35 Uhr #3276Robert Mair
TeilnehmerHallo,
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
Robert24 Februar 2011 um 18:46 Uhr #3277Jan Giebels
TeilnehmerHallo,
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
-
AutorBeiträge