zeos utf8 mysql delphi

0

mam bazę na mysql skodowaną utf8 .... i nie daję rady z polskimi znakami
Oczywiście jakieś pośrednie rozwiązania zrobiłem i coś tam poprawnie wyświetla, ale jak zrobić właściwą obsługę bazy po przez komponent zeos to nie mam pojęcia.

problemy :

  1. wyświetlanie zawartości bazy w programie delphi
  2. przesłanie rekordu z delphi do bazy z polskimi znakami, tak aby były one poprawnie wyświetlane na www

utf8code, utf8encode, ansitoutf8, utf8toansi nie działa tak jak bym oczekiwał (może coś źle robię ?). np. wysłanie z delphi do bazy ansitoutf8('śćź'), powoduje, że w bazie pojawiają się krzaczki (z poziomu strony www), odczytanie w delphi powoduje wyświetlenie krzaczków, a zrobienie funkcji utf8toansi wyciągnie wreszcie polskie znaki ale to pod delphi.
NIC z tego nie rozumiem ... baza jest na 100% utf8, na stronach www wszystko jest OK a w delphi nie potrafię nic ze znakami zrobić. PROSZĘ o pomoc, bo wiem że problem jest prosty, tylko ja czegoś nie rozumiem.

forum całe przeczytałem w tym temacie, pomocą w delphi też umiem sie posługiwać i wiem co to są google !

0

ale nic nie zmieniasz po stronie delphi! ustawiasz jedynie client encoding z poziomu sqla po nawiązaniu połączenia i powinno załatwić sprawę

0
Misiekd napisał(a)

ale nic nie zmieniasz po stronie delphi! ustawiasz jedynie client encoding z poziomu sqla po nawiązaniu połączenia i powinno załatwić sprawę

tzn. ?? prosze napisz jak dla idioty

wysyłanie polskich znaków na serwer rozwiązałem tak :

ZQuery1..SQL.Clear;
ZQuery1.SQL.Add('SET NAMES "utf8" COLLATE "utf8_unicode_ci"');
ZQuery1..ExecSQL;

a później :

ztable2['pole']:=ansitoutf8('śćźżąęół');

i na www są pieknę ogonki :-)

ale jak wyświetlić zawartość tabeli mysql np. w memo ?, aby były też ogonki? nie mówiąc już o dbgrid [glowa]

generalnie usiłuję zrozumieć problem więc za każdy głos będę wdzięczny.

1

prawie dobrze :)

SET NAMES "cp1250" COLLATE "cp1250_general_ci"

i dodajesz najnormalniej w świecie bez konwersji

0
Misiekd napisał(a)

prawie dobrze :)

SET NAMES "cp1250" COLLATE "cp1250_general_ci"

i dodajesz najnormalniej w świecie bez konwersji

GENIALNE [!!!]
ZQuery1..SQL.Clear;
ZQuery1.SQL.Add('SET NAMES "cp1250" COLLATE "cp1250_general_ci"');
ZQuery1.ExecSQL;

powyższy kod podpięłęm pod events AfterConnect komponentu ZConnection1 i naprawdę działa. Wiedziałem, ze odpowiedź jest banalna ;-)

Misiekd wielkie dzięki, wreszcie wiem co robie. Masz u mnie ogromne [browar]

0

Witam.
Też mam problem z odczytywaniem polskich znaków z bazy kodowanej w utf8. Baza to sqlite3, używam ZeosLib 664.
Próbując, tak jak proponujecie, wywołać 'SET NAMES "cp1250" COLLATE "cp1250_general_ci"'
dostaję błąd:
Likely SQL syntax error: SET NAMES "cp1250" COLLATE "cp1250_general_ci" [ near "SET": syntax error ]
Exception Name: NS_ERROR_FAILURE

Czyli błąd składni. Ale gdzie jest pomyłka? Czy ktoś może mnie oświecić, o co chodzi? Bo osobiście nie mam pojęcia.

Z góry dzięki.

0
Dzejkob napisał(a)

Baza to sqlite3 (...) Próbując wywołać 'SET NAMES "cp1250" COLLATE (...)

Po prostu w SQLite nie ma czegoś takiego jak SET NAMES - nie ma też żadnego odpowiednika z tego co widzę w dokumentacji... Sam również walczę z identycznym problemem i na razie nie mam pomysłu.
Tutaj jest trochę informacji na ten temat:
http://www.alberton.info/dbms_charset_settings_explained.html</url>

0

U mnie (Postgres 8.4 + Zeos 6.6.5-stable) nie działa

zQuery1.SQL.Add('SET NAMES ''cp1250'' COLLATE ''cp1250_general_ci'';');

za to pięknie działa

  zQuery1.SQL.Clear;
  zQuery1.SQL.Add('SET CLIENT_ENCODING TO ''WIN1250'';');
  zQuery1.ExecSQL;

baza oczywiście na UTF8.

lub można wpisać w zConnection1.Properties coś takiego: codepage=WIN1250

też pięknie działa :D

0

ZConnection ma też property ClientCodePage - też można to tam wpisać :)

zConnection.ClientCodePage := 'cp1250'; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1