Zeichensatz ändern

Hi,
ich hab ein kleines Problem. Ich hab eine Textdatei, dessen Daten zeilenweise in die Datenbank eingelsen werden müssen. Die Datei enthält aber auch zum Teil kyrillische Buchstaben. Wenn ich sie einlese, werden in der Datenbank lauterFragezeichen abgespeichert, weil wahrscheinlich auf dem Server der Zeichensatz nicht richtig konfiguriert ist.
Wenn es daran liegt, wie kann ich das im nachhinein ändern?

Danke

Hallo kartal,

könntest Du die Angaben mal vervollständigen?

  • Wie lautetet der interne Zeichesatz der Datenbank (SERVER_ENCODING)?
  • Wie lautet der Zeichensatz mit dem die Daten importiert werden (CLIENT_ENTCODING)?
  • In welchen Zeichensatz liegen die zu importierenden Daten vor?
  • Wie lautet die Version von PostgreSQL?
  • Auf welchem Betriebssystem wurde PostgreSQL installiert?
  • Wie importierst Du die Daten (z.B PgAdmin, Script, etc) ?

mfg

fristo

Wenn du BYTEA als Spaltentyp verwendest, dürfte der Datenbank egal sein, was da drin ist.

Allerdings hast du die Probleme auch beimAnzeigen, weil dein Anzeigemedium (Browser?) nicht mit dem Charset zurechtkommt.

Hi,
das sind die einstellungen

server_encoding:latin1
client_encoding:sql_ascii
version: postgres 8.0.3
windows xp
ich werde es über java importieren

Die werden in Unicode oder Ascii vorliegen.
Noch eine Frage: Wenn ich die Daten aus der Datenbank abrufe (mittels einem Formular im Browser) wie werden die Daten dann dargestellt.

Danke für eure Antwort

So, wie die ausliefernde Scriptsprache den Content Header vorgibt.

Hallo kartal,

Damit die Datenbank die kyrillische Buchstaben auch richtig speichert, muss als SERVER_ENCODING ‘UTF-8’ verwendet werden. Leider läßt sich die SERVER_ENCODING nachträglich nicht ändern, so dass die Datenbank neu erstellt werden muß.

Zwischen Java und PostgreSQL sollte es keine Schwierigkeiten geben, da Java auch intern UTF-8 verwendet.

Zur Kontrolle kann man PgAdmin verwenden. Wenn man den Namen der Tabelle und danach das 7. Icon von links anklickt, zeigt den PgAdmin den Inhalt der Tabelle. PgAdmin arbeitet selbst immer mit dem Zeichensatz “UTF-8”.



Siehe Anwort von ads.



mfg

fristo

das heißt also ich muss postgres neu installieren. und die einstellung die ich während installation nehme gilt dann für jede datenbank die erstelle?

Nein, du musst bloss eine neue Datenbank erstellen und beim Erstellen das passende Encoding mit angeben.
Wenn du an den Namen deiner existierenden Datenbank gebunden bist, musst du sie löschen und dann neu erstellen.

Die passenden Befehle:
DROP DATABASE, CREATE DATABASE WITH ENCODING

Oder auf der Unix Shell als User postgres:
dropdb, createdb

also ich hab ne neue DB erstellt mit dem Zeichensatz UTF8. wenn ich aber ein kyrillisches Zeichen speichern möchte, dann speichert er wieder Fragezeichen in der Tabelle. Ich hab das getestet indem ich über ein kleines Java-Programm das Zeichen eingegeben habe.

Kann das java Programm das Zeicen richtig darstellen?
Was für einen Datentyp hast du für die Tabelle/Spalte?

das programm stellt das zeichen richtig dar.
die datenbankspalte hat den datentyp varchar. kann das daran liegen das der server_encoding nicht utf8 ist.
weil wenn ich die datenbank neu erstelle mit encoding dann setze ich ja nur den client_encoding auf utf8. Oder?

Hallo kartal,

Was sagt denn PgAdmin, wenn Du den Namen der Datenbank anklicks? Was steht im rechten unterem Feld unter Eigenschaften? Da sollte so etwas ähnliches stehen:

 
CREATE DATABASE meine_datenbank
  WITH OWNER = fristo
       ENCODING = '[B][color=red]UTF-8[/color][/B]'
       TABLESPACE = pg_default;



mfg

fristo

Hallo kartal,

Zeichen schreiben ist das eine, Zeichen lesen das andere. Hat sich denn der Code beim lesen geändert? Mit welchem Programm werden die kyrillisches Zeichen als ?-Zeichen dargestellt?



mfg

fristo