Polskie znaki w MySQL, doctrine i symfony

Niejednokrotnie tworząc bazę danych w MySQL, nie trudno nie zauważyć, iż w świeżej, nieskonfigurowanej instalacji tego systemu zarządzania bazą danych, domyślnym typem kodowania nie jest utf8 tylko cp1252/latin1_swedish.

Tworząc aplikację korzystającą z takiej bazy, a samej używającej unicode, powinniśmy dla świętego spokoju sprawdzić i pilnować z jakiego kodowania nasza baza danych korzysta. Choćby dlatego, że inna aplikacja podłączona do takiej bazy danych może mieć problemy z rozpoznaniem i połapaniem się w tej mieszance kodowań. Nie jest również zbyt intuicyjnym przechowywanie ciągu znaków zakodowanego w unicode, w strukturze używającej cp1252 lub innego systemu kodowania.

Również symfony, z całym przywiązaniem do unicode, nie robi nic, by wymusić stosowanie tego kodowanie w tworzonych poprzez doctrine tabelach, czy też samym połączeniu na lini baza danych - aplikacja. Konieczne jest ręczne ustawienie odpowiednich wartości w pliku database.yml:

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      #...
      attributes:
        default_table_charset: utf8
        default_table_collate: utf8_general_ci

W ten sposób można w spokoju tworzyć aplikacje używające kodowania unicode bez obawy wystąpienia błędu nieprawidłowego kodowania znaków w porównaniu MySQL, lub innych niespodzianek z tym związanych.

Z reguły znaki używane na zachodzie (znaki ASCII) są kodowane w ten sam sposób w unicode jak i w cp1252/latin1, czego nie można powiedzieć o polskich ogonkach, czy występujących w czeskim i innych zachodniosłowiańskich językach ptaszkach (Przykład: Čech).

Komentarze

Comments powered by Disqus