Guten Tag,
seit der Installation der Postgres-Version 8.3.4 habe ich folgendes Problem:
Wir haben ein Lazarus(Pascal)-Programm geschrieben, welches unter Windows automatisch eine Datenbank installiert; als Vorlage dient ein Postgis-Template (template_postgis).
Vom Programm werden einzelne SQL-Befehle aus einem Script an Postgres gesendet; unter 8.2 funktioniert das auch prima.
Unter 8.3.4 gibt es bei folgender Zeile (unterstrichen):
CREATE TABLE public.befundprofil (
id bigserial NOT NULL,
"name" varchar(128),
CONSTRAINT befundprofil_pkey PRIMARY KEY (id)) WITHOUT OIDS;
ALTER TABLE public.befundprofil OWNER TO "Administrator";
INSERT INTO Befundprofil (ID,Name) VALUES (1,'unbekannt');
INSERT INTO Befundprofil (ID,Name) VALUES (2,'Sandbodenprofile der Geest');
INSERT INTO Befundprofil (ID,Name) VALUES (3,'Sand mehr als 20 dm');
eine Fehlermeldung:
Ungültige Bytesequenz für Kodierung "UTF8" 0xfc
Im PGADMIn wird das Script komplett verarbeitet, die Daten werden eingetragen.
Hat Jemand eine Idee?
Danke für Eure Hilfe.
Gruß Bernd
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Danke, Andreas,
kannst Du mir sagen, warum die Fehlermeldung erst beim 3. Eintrag auftritt; die ersten beiden Einträge werden in die Datenbank eingefügt.
Erst die unterstrichene Zeile liefert die Fehlermeldung.
Gruß Bernd
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Nein, es sind keine Sonderzeichen drin; der emfohlene Eintrag hat auch keine Abhilfe gebracht.
Kann es daran liegen, dass der Server mit win1252-Encoding läuft; das Postgis-Template wird bei der Postgis-Installation automatisch als UTF8 installiert und somit auch als Vorlage verwendet?
Wenn ich die Vorlage ignoriere und einfach eine gleichnamige Datenbank ohne die Postgis-Einträge erstelle, dann wird das Script komplett verarbeitet.
Danke für Deine Mühe
Gruß aus Scheeßel
Bernd
Es ist ein Sonderzeichen drin, das ist die Stelle an der diese Fehlermeldung auftritt.
Übrigens sind Sonderzeichen je nach eingestelltem Encoding unterschiedlich. Wenn du also Latin1 hast werden jede Menge "normaler" Zeichen Probleme machen wenn diese aus UTF8 kommen. Deine Daten sind anscheinend Latin1 oder Windows 8 Bit oder so und du versuchst diese, in eine UTF8 Verbindung zu schreiben. Dann interpretiert UTF8 diverse Bits anders und versucht, aus dem aktuellen und einigen Folgebytes ein Zeichen zu lesen. Wenn das nicht funktioniert weil es das Zeichen nicht gibt ... dann löst das genau diesen Fehler aus.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Guten Morgen,
heute kommt mein Kollege aus dem Urlaub; er meinte, wir sollten es mal mit dem Befehl
set client_encoding = 'win1252' (statt 'utf8')
und siehe da; das ganze Script wird abgearbeitet.
Aber WARUM ist es so? Ich möchte gern PostgreSQL verstehen...
Lieben Gruß
Bernd
Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Daten können in unterschiedlichen Encodings vorliegen, deine sind Windows Encoding, die Datenbank verlangt UTF8 Encoding. Glücklicherweise kann die Datenbank das automatisch umwandeln (solange sich das eine in dem anderen abbilden lässt), du musst der DB nur sagen, in welchen Encoding deine Daten vorliegen. Der Rest passiert automatisch.
Deine Daten stehen jetzt in UTF8 in der Datenbank. Wenn du sie wieder im Windows Encoding zurückhaben möchtest, setzt du client_encoding wieder passend und die DB liegert die Daten dann in deinem gewünschten Encoding zurück.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Character Set Support
Und hier noch etwas zum spielen: UTF Converter
mfg
fristo
Danke für die schnelle Antwort
Mit dem Primary key habe ich keine ahnung is das wenn ich auf design tabel gehe ob da ein Schlüssel ist oder nicht?
Und der Ahnhang ist nett, dass mit der Verschlüsselung weis ich schon nur kann ich mit set client_encoding = 'win1252' nichts anfangen da ich nicht weis wozu das ist, soll ich das im query analyzer compilieren oder was?
Und wenn ich das mache dann kommt außerdem diese Fehlermeldung
Line 1: Incorrect syntax near '='.
Also wenn das möglich wäre und jemand weis wie das stupide für Idioten zu lösen ist dann wäre ich sehr dankbar.
Auch wenn ich selbst ungerne Skript Kiddys unterstütze aber sql ist ne Nummer für sich.
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen