Umlaute von MySQL

  • Antworten:3
Helen Müller
  • Forum-Beiträge: 5

29.03.2011, 21:37:05 via Website

Guten Abend

Ich kämpfe noch immer mit meiner MySQL Datenbank Abfrage.

Folgendes:
Auf der MySQL DB sind die Felder meiner Tabelle als latin1_german1_ci (Kollation) gespeichert. Der Inhalt wird im phpAdmin richtig angezeigt (äöü).
In meinen PHP Script habe ich folgendes eingegeben: mysql_set_charset('utf8',$link);

Die Ausgabe sieht dann etwa so aus: Gem\u00fcse anstatt Gemüse
Wenn ich das mysql_set_charset('utf8',$link); weglasse oder utf8 mit ISO 8859-1 ersetzte erhalte ich als Rückgabe 'null'.

Weiss jemand was man da noch machen könnte um die Umlaute richtig hinzukriegen?

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

29.03.2011, 22:02:13 via Website

Wie sieht denn die Query aus? Welche Kodierung haben die Strings in der Applikation und in den Feldern der DB? Die Collation sagt noch lange nichts über den Inhalt der DB aus. Da kommt noch die Kodierung des Client, die des Servers und die der Verbindung zu. Alles in allem sehr undurchsichtig ;)

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten
Helen Müller
  • Forum-Beiträge: 5

29.03.2011, 23:55:01 via Website

ja, undurchsichtig ist wohl der richtige Ausdruck dafür :mellow:

Also, das query sieht so aus:

--------------------

<?php


$link = mysql_connect("localhost","user","passwort");
mysql_set_charset('utf8',$link);

mysql_select_db("dbname");

$q=mysql_query("SELECT * FROM pflanzen WHERE art ='".$_REQUEST['art']."'");

while($e=mysql_fetch_assoc($q))

$output[]=$e;


print(json_encode($output));

mysql_close();

?>

-----------------------

erstellt habe ich die Tabelle so:

CREATE TABLE pflanzen(
id INT NOT NULL AUTO_INCREMENT,
uid VARCHAR(10) NOT NULL,
kategorie VARCHAR(45) NOT NULL,
art VARCHAR(45) NOT NULL,......
PRIMARY KEY(id)) DEFAULT CHARACTER SET latin1 COLLATE latin1_german1_ci;

ist das mit Kodierung der Felder in der DB gemeint?

Ich starte das Skript mit HttpPost und erstelle mir dann so den String:

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.i(DEBUG_TAG, "resultat: " + result); etc.

Im LogCat sehe ich dann das 'Gem\u00fcse.

Auf den Server kann ich wohl nicht gross Einfluss nehmen, der ist extern.

Habe auch schon versucht beim InputStreamReader die kodierung zu ändern, hilft aber auch nicht wirklich.

Danke für die Anteilnahme
Helen

Antworten
Gelöschter Account
  • Forum-Beiträge: 107

30.03.2011, 07:55:50 via Website

Ich denke, dass deine Arten in der DB als UTF-8 drin stecken und deshalb durch Abfragen mit Latin1 nicht matchen, sobald Umlaute drin sind. Du solltest auf jedem Fall das gleiche Encoding verwenden, also Quelltexte, Daten,... Sonst begibst du dich in eine Welt des Schmerzes ;)

VG Carsten

PS Bedenke: Du wirst durch dein hin und her wahrscheinlich sehr gemischte Daten in der DB drin haben.

— geändert am 30.03.2011, 07:56:32

Seid nett zueinander: AndroidPIT-Regeln ;)

Antworten