Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Doctrine] Kodowanie LATIN2
Forum PHP.pl > Forum > PHP > Frameworki
lukaskolista
Mam problem z konfiguracją połączenia w Symfony2/Doctrine2 z bazą danych, która posiada kodowanie LATIN2. Niezależnie od tego, czy w konfiguracji połączenia podam:
charset: UTF8
czy
charset: LATIN2
i tak pobiera się z krzakami, muszę jawnie zmienić kodowanie danych przez
  1. $columnValue = iconv('latin2', 'UTF-8', $entity->getColumnValue());

Takie rozwiązanie mi nie odpowiada, ponieważ gdy zmieni się kodowanie bazy, to będę musiał zmieniać konfigurację + kod, a tego drugiego wolałbym nie musieć zmieniać.
redeemer
Może dlatego że pobierasz LATIN2 a strona jest wyświetlana w UTF8? Przekonwertuj bazę na UTF8 i po problemie.
lukaskolista
Nie ma tam żadnej strony, aplikacja składa się z deamonów samych.

Cytat
Przekonwertuj bazę na UTF8 i po problemie.

Gdybym mógł, to bym nie pisał tego tematu. Nie jestem właścicielem tej bazy i nie mogę na niej nic zrobić.

Miałem nadzieję, że Doctrine jakoś ładnie to obsługuje i dla bazy w LATIN2 mogę pobierać dane w UTF8. W google nic na ten temat nie znalazłem, ale mogłem coś przeoczyć. Możliwe, że w konfiguracji (config.yml) połączenia doctrine->baza się to gdzieś ustawia, ale nie mogę nic o tym znaleźć.

http://www.postgresql.org/docs/9.4/static/multibyte.html - tutaj w sekcji "Table 22-2. Client/Server Character Set Conversions" jest napisane, że baza w LATIN2 może być obsługiwana przez klienta w UTF8 - pytanie jak tego dokonać, żeby polskie znaki się nie wykrzaczały (bo tylko w tym jest problem).
redeemer
Hm, może spróbuj w konfiguracji encji dopisać też odpowiednie opcje.

Kod
/**
* @ORM\Table(options={"collate":"...", "charset":"..."})
* @ORM\Entity
*/
...
lukaskolista
Próbowałem w adnotacji dać @ORM\Table(..., options={"charset":"UTF-8"}) i różne inne kombinacje nazwy kodowania, ale to nie pomaga.
redeemer
No to nie wiem, nigdy się nie bawiłem innym kodowaniami niż UTF8 w doctrine(2), ale może zamiast ręcznie konwertować, to po prostu rozszerzyć doctrine o nowy typ np. latin2string? Coś podobnego do https://stackoverflow.com/questions/1911228...with-doctrine-2
lukaskolista
Jest to jakieś rozwiązanie - dzięki. Wolałbym rozwiązanie natywne, ale jak się nie da, to trzeba będzie stworzyć taki typ lub może jakoś rozszerzyć driver.

Edit:
Wpadłem na pomysł dopisania do adnotacji encji i kolumny (domyslnie kolumna dziedziczyła by po tabeli) opcji convertCharset, która by konwertowała wartość na podstawie wskazanych kodowań, ale to jeszcze jest do przemyslenia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.