# Zeichensatz-Fehler



## jgh (12. Mai 2011)

Hallo,

ich benutze eine MySql-DB und habe nun per jdbc in eclipse eine Verbindung zur DB hergestellt. Per SQL-Dump habe ich ein paar Tabellen hergestellt und mit Inhalten gefüllt. Ich kann auf die Tabellen, sowie die Daten problemlos aus eclipse zugreifen....ALLERDINGS :

wenn ich mir die Daten dann auf der Console anzeigen lasse...sind einige Buchstaben leider verkehrt, also die typischen wie "ü", "ß" usw.
in MySQL CommandLine Client werden sie mir korrekt angezeigt.
Ob ich den [c]System.setProperty("file.encoding", "UTF8"	);[/c] aufrufe, oder auch nicht...es ändert nichts. 
Auch in eclipse unter _help->Preferences->General->Workspace _ habe ich mal UTF8 als FileEncoding angegeben...leider keine Auswirkung auf die Testausgabe auf der Console.

Habt ihr evtl ne Idee...wie man das fixen kann?

MfG


----------



## jgh (13. Mai 2011)

mmmh, also evtl. noch ein paar Infos:
also ich habe mir die *mysql-5.5.11-win32.msi* runtergeladen und mit dem Installer auf meinem *win7, 32 bit System* installiert.
Also Connector nutze ich *mysql-connector-java-5.0.8* aus eclipse heraus.
Für die Verbindung zur Datenbank nutze ich die folgende Klasse:

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConnect {
	private Statement statement;
	private Connection con;
	private ResultSet rs = null;

	public DBConnect() {
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			con = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/derNamederDB", "user", "pw");
			statement = con.createStatement();
		} catch (InstantiationException e) {
			System.out.println("^1");
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			System.out.println("^2");
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			System.out.println("^3");
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("^4");
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public ResultSet doQuery(String query) {

		try {
			rs = statement.executeQuery(query);
			return rs;
		} catch (SQLException e) {
			e.printStackTrace();
			return rs;

		}

	}
```

über die *MySQL Command Line Client * erstelle ich bspw folgendes Table:

```
mysql>create table test(testbuchstabe char(50));
Query OK, 0 rows affected(0.13 sec)
```

anschließend schreibe ich meine 1 Zeile in diese Tabelle (händisch):

```
insert into test values('äÄöÖüÜß');
Query OK, 1 row affected (0.29 sec)
```

wenn ich dann aus eclipse heraus wie folgt auf die DB zugreife:

```
DBConnect db = new DBConnect();
		ResultSet rs = db.doQuery("Select * from test");
		try {
			while (rs.next()) {
					System.out.print(rs.getString("testbuchstabe")+"\t");
				System.out.println();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
```
bekomme ich auf der Console folgende Ausgabe:
*„Ž”™?šá	*

und nun weiß ich nicht weiter...HILFE^^


----------



## jgh (13. Mai 2011)

Danke erstmal für die Antwort...leider bekomme ich da folgende Ausgabe:

*??????á	
*
das problem müssten doch einige schon gehabt haben...


----------



## hansmueller (13. Mai 2011)

Hallo,

ich denke, das hängt davon ab, welcher Zeichensatz in der DB verwendet wird.
Schau dir mal dieses Thema an: http://www.java-forum.org/datenbankprogrammierung/117796-koreanische-schriftzeichen-mysql-datenbank-schreiben.html#post759148

@Tomate_Salat: Warum sollte UTF-8 keine Umlaute können?

MfG
hansmueller


----------



## Tomate_Salat (13. Mai 2011)

Hatte ich fälschlicherweise so in Erinnerung. :-/ Hab mir jz mal die UTF-8-Tabelle angeschaut und du hast recht.


----------



## jgh (13. Mai 2011)

danke für die tipps, aber leider führen die alle zum gleichen Ergebnis.

sowohl das 
	
	
	
	





```
"?connectionCollation=utf8_general_ci"
```
 als auch 
	
	
	
	





```
?useUnicode=yes&characterEncoding=UTF-8
```


----------



## hansmueller (13. Mai 2011)

Hallo,

was für ein Zeichensatz ist den in der MySql-Datenbank eingestellt?
Wenn es ein anderer als UTF-8 ist, mußt du halt diesen für die Verbindung zu deiner DB mitgeben.

MfG
hansmueller


----------



## jgh (13. Mai 2011)

Latin1 steht in der [c]my.ini[/c]

und das habe ich auch versucht... Ergebnis die gleiche SCHEISSE 

oder wo und wie kann ich sehen, was für ein Zeichensatz meine DB benutzt?

Habe auch versucht, in der o.g. und unten gezeigten Datei die Zeichensatz auf UTF-8 zu ändern, dann kann ich mein PW bei der MySQLCommandLine Client noch eingeben...und dann schmiert mir die CommandLine ab 

ich bin echt am verzweifeln...

[XML]# CLIENT SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by MySQL client applications.
# Note that only client applications shipped by MySQL are guaranteed
# to read this section. If you want your own MySQL client program to
# honor these values, you need to specify it as an option during the
# MySQL client library initialization.
#
[client]

port=3306

[mysql]

default-character-set=latin1


# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this 
# file.
#
[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306


#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.5/"

#Path to the database root
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=latin1[/XML]


----------



## hansmueller (16. Mai 2011)

Hallo,

schau dir mal diesen Link an:MySQL :: MySQL 5.1 Referenzhandbuch :: 10.9 Zeichensätze und Sortierfolgen, die MySQL unterstützt

Ich habe mit MySql bisher nur sehr wenig zu tun gehabt, aber wenn ich es richtig verstehe ist 
	
	
	
	





```
latin1
```
 gleichzusetzen mit 
	
	
	
	





```
cp1252
```
.
Vielleicht funktioniert ja 
	
	
	
	





```
?characterEncoding=cp1252
```

Vielleicht hilft dir dieser Link weiter: jdbc mysql: encoding von utf-8 nach latin1

MfG
hansmueller


----------



## jgh (16. Mai 2011)

danke, das hatte ich leider auch schon versucht und kein Erfolg dabei.


Über jede Idee/Vorschlag oder auch sonst was...bin ich wirklich dankbar.

Mfg

EDIT:
ach...das haut auch nicht so hin


----------



## jgh (16. Mai 2011)

falls es noch jemanden interessieren sollte:

ich habe jetzt mein Eclipse unter _Windows-Preferences-General-Workspace-Text file encoding-_ auf utf8 gesetzt, im Java-Code [c]	System.setProperty("file.encoding", "utf8");[/c] das File-Encoding nochmal explizit gesetzt und dann beim _DriverManager.getConnection(....?characterEncoding=utf8_

so kann ich mein sql-dump zumindest korrekt ausgeben und dann auch in die db schreiben...irgendwie nicht richtig, aber es funktioniert.

Fallls doch noch jemand eine Idee hat...jederzeit und immer gerne gesehen!

MfG


----------

