Witam.
Już od kilku miesięcy bawię się w testowanie lazarusa w ujęciu client serwer.
Bywało z tym różnie ale ciągle do przodu. Nawet udało mi się już napisać programik, z tym że wyszedł problem związany z polskimi znakami, a dokładnie rzecz ujmując z przesłaniem ciągu znakowego z tabeli która zwiera pole określonej max długości.
Np mając pole "test" character varying(9) posiadające wartość: 1234567ĄĄ(w badzie danych ładnie go widać że ma 9 znaków).
Teraz pobierając dane z tego pola przez program napisany w lazarusie otrzymuję wartość: 1234567Ą(czyli błędnie bo w bazie jest 1234567ĄĄ, brakuje jednego znaku.
Parametry bazy danych PostgreSQL9 zainstalowanej na Win XP
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'Polish_Poland.1250'
LC_CTYPE = 'Polish_Poland.1250'
CONNECTION LIMIT = -1;
Teraz pytanie gdzie leży problem że dokonuje się jakaś nie jawna konwersja polskich znaków że z bazy danych otrzymują mniej znaków. Co ciekawe zauważyłem iż jeżeli użyję określoną ilość polskich znaków w takim polu to otrzymuję po wykonaniu zapytanie przez program o tyle samo mnie znaków.
Wygląda to jakby zachodziła nie jawna konwersja między UTF8 Win1250 na jakimś etapie, bo polskie znaczki w UTF8 zajmują 2 bajty.
Co ciekawe jeżeli z tego programu robię operację wstawienia lub modyfikacji tego pola z maksymalną ilością znaków np 1234567ĄĄ to w polu w bazie danych zapisywana jest dokładnie ta wartość.
Natomiast jeżeli pobieram dane dane z tego pola to mam wartość 1234567Ą
I teraz jest pytanie czy jak robię coś nie tak, tylko pytanie w którym miejscu.
PS.
Myślałem ze problem może leżeć po stronie biblioteki libpq dla danego systemu, dlatego kompilację programu zrobiłem też na linuksie Ubuntu, ale efekt ten sam.
Pozdrawiam.
Tadeusz