On 2023-05-27 13:50, Volker Englisch <
v...@krrz.de> wrote:
> Auf einem Datenbankserver (PostgreSQL) werden die Datensätze in Latin1
> gespeichert.
Ich will jetzt nicht wissen, wieso.
> Auf Windows-Clients funktioniert der Zugriff mit dem ANSI-ODBC-Treiber
> einwandfrei.
>
> Leider nicht auf Linux-Clients (UTF-8 Zeichensatz). Dort werden Umlaute
> "geschrottet" angezeigt.
Das kann natürlich auch an der Anzeige liegen.
> Meine aktuelle .odbc.ini sieht so aus (Ausschnitt):
>
> [Media]
> Driver = /usr/lib/x86_64-linux-gnu/odbc/psqlodbcw.so
> Servername = xxxxxxxx
> Username = xxxxxxxx
> Password = xxxxxxxx
> Database = media
> Port = 5432
> client charset = UTF-8
> server charset = Latin1
>
> Ich habe schon alle möglichen Einträge probiert, die ich im Netz
> gefunden habe, aber ohne Erfolg.
>
> Was muss in die .odbc.ini korrekterweise rein...?
Mit ODBC kann ich Dir nicht helfen (habe ich unter Linux/Unix nie
verwendet, da gibt es eigentlich immer ein naheliegenderes System), aber
mit psql kann ich auf eine Datenbank mit Latin9 zugreifen:
postgres=# create database isotest encoding iso885915 lc_ctype='en_US.iso885915' lc_collate='en_US.iso885915' template=template0;
CREATE DATABASE
isotest=> create table t(id serial primary key, t text);
CREATE TABLE
isotest=> show server_encoding ;
╔═════════════════╗
║ server_encoding ║
╟─────────────────╢
║ LATIN9 ║
╚═════════════════╝
(1 row)
isotest=> show client_encoding ;
╔═════════════════╗
║ client_encoding ║
╟─────────────────╢
║ UTF8 ║
╚═════════════════╝
(1 row)
isotest=> insert into t(t) values('Käse');
INSERT 0 1
isotest=> insert into t(t) values('100 €');
INSERT 0 1
isotest=> insert into t(t) values('メギツネ');
ERROR: character with byte sequence 0xe3 0x83 0xa1 in encoding "UTF8" has no equivalent in encoding "LATIN9"
isotest=> select * from t;
╔════╤═══════╗
║ id │ t ║
╟────┼───────╢
║ 1 │ Käse ║
║ 2 │ 100 € ║
╚════╧═══════╝
(2 rows)
Die Daten sind auch wirklich in ISO-8859-15 gespeichert:
# od -c 246140
0000000 320 \0 \0 \0 270 353 002 T \0 \0 \0 \0 \0 260 037
0000020 \0 004 \0 \0 \0 \0 330 237 B \0 260 237 D \0
0000040 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0017660 335 325 \v \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0017700 002 \0 002 \0 002 \t 030 \0 002 \0 \0 \0 \r 1 0 0
^^^ ^^^ ^^^
0017720 244 \0 \0 \0 \0 \0 \0 334 325 \v \0 \0 \0 \0 \0
^^^ ^^^
0017740 \0 \0 \0 \0 \0 \0 \0 \0 001 \0 002 \0 002 \t 030 \0
0017760 001 \0 \0 \0 \v K 344 s e \0 \0 \0 \0 \0 \0 \0
^^^ ^^^ ^^^ ^^^
0020000
hp