Lazarus-Anbindung an PG-Datenbank

Programmierung mit PostgreSQL (C#, PHP, Perl, Java, ...)

Lazarus-Anbindung an PG-Datenbank

Beitragvon Pegasus0211 » Di 21. Okt 2008, 11:23

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
Pegasus0211
Benutzer
 
Beiträge: 53
Registriert: Di 5. Sep 2006, 13:21
Wohnort: Scheeßel

Beitragvon akretschmer » Di 21. Okt 2008, 11:41

Pegasus0211 hat geschrieben: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


Setze im Script/Client das Client-Encoding passend.

Beispiel:

Code: Alles auswählen
test=# show client_encoding;
 client_encoding
-----------------
 LATIN1
(1 row)

test=*# set client_encoding ='UTF8';
SET
test=*# show client_encoding;
 client_encoding
-----------------
 UTF8
(1 row)


Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5954
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon Pegasus0211 » Di 21. Okt 2008, 11:51

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
Pegasus0211
Benutzer
 
Beiträge: 53
Registriert: Di 5. Sep 2006, 13:21
Wohnort: Scheeßel

Beitragvon akretschmer » Di 21. Okt 2008, 11:53

Pegasus0211 hat geschrieben: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


Vielleicht ist da noch irgend ein Sonderzeichen drin?

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5954
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon Pegasus0211 » Di 21. Okt 2008, 11:59

akretschmer hat geschrieben:Vielleicht ist da noch irgend ein Sonderzeichen drin?
Andreas



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
Pegasus0211
Benutzer
 
Beiträge: 53
Registriert: Di 5. Sep 2006, 13:21
Wohnort: Scheeßel

Beitragvon ads » Di 21. Okt 2008, 20:04

Pegasus0211 hat geschrieben:Nein, es sind keine Sonderzeichen drin

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 Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD

Beitragvon Pegasus0211 » Mi 22. Okt 2008, 08:13

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... :confused:


Lieben Gruß

Bernd
Pegasus0211
Benutzer
 
Beiträge: 53
Registriert: Di 5. Sep 2006, 13:21
Wohnort: Scheeßel

Beitragvon ads » Mi 22. Okt 2008, 08:32

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 Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD

Beitragvon fristo » Mi 22. Okt 2008, 15:31

Pegasus0211 hat geschrieben: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... :confused:



PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Character Set Support

Und hier noch etwas zum spielen: UTF Converter





mfg

fristo
fristo
Erfahrener Benutzer
 
Beiträge: 670
Registriert: Do 8. Dez 2005, 13:30
Wohnort: Raum Frankfurt/Main

Beitragvon Clericer » So 7. Jun 2009, 16:17

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.
Clericer
Neuer Benutzer
 
Beiträge: 3
Registriert: So 7. Jun 2009, 12:00

Nächste

Zurück zu Programmierung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste