MySQLdb i problem polskich znaków

Opublikowane przez Jarosław Zabiełło Fri, 16 Mar 2007 01:36:00 GMT

W końcu pojawiła się wersja stabilna pythonowej biblioteki MySQLdb 1.2.2. Co ciekawsze, jest dostępna instalacja w formie pakieru egg zarówno dla Pythona 2.4 jak i 2.5. Nie trzeba też już więcej używać instalatorów binarnych pod windozą. Wystarczy (zakładając że mamy zainstalowane setuptoolsy) wykonać komendę:

easy_install -U MySQL_python

Osoby używające Django i MySQL5 muszą pamiętać aby dodać dodatkową opcję do settings.py.

W wypadku wersji edge (z SVN), należy dodać:

DATABASE_OPTIONS = {'use_unicode': True, 'charset': 'utf8'}

W przypadku starszego kodu to nie pomagało. Musiałem wyłączyć zwracanie wyników w postaci obiektów unikodowych Pythona. W tym wypadku podziałała opcja:

DATABASE_OPTIONS = {'use_unicode': False, 'charset': 'utf8'}

Widzę, że Django najwyraźniej idzie w tym samym kierunku co Pylons, tzn. myśli aby wszystkie stringi i pracę z bazą oprzeć na obiektach unikodowych a nie stringach UTF-8. W wypadku Pylonsów, ich najnowszy system szablonów Mako standardowo już pracuje wewnętrznie na czystych obiektach unikodowych Pythona.

Uwaga! Django ma trochę niedopracowanego kodu. Np. panel admina się sypie jak ustawiona jest powyższa opcja z włączonym unikodem. Trzeba ją wyłączyć. Ale wtedy z kolei źle się wyświetla część tekstów zawierająca polskie znaki (np. imię czy nazwisko redaktora). Jednak lepsza to niż w ogóle brak możliwości edycji rekordów. Wniosek: dla Django używaj drugiej opcji. Aktualnie kod Django jeszcze nie dorósł do tego, aby używać pełnego unikodu z bazą MySQL.

Tagi , ,  | 5 comments

Comments

  1. Avatar satm powiedział 3 days later:

    A po co ustawia się DATABASE_OPTIONS? Nie mam tego ustawionego i Django (wersja svn) śmiga mi na MySQL 5 z tabelami unikodowymi. Panel admina się nie sypie. Co tracę, nie używając tego ustawienia?

  2. Avatar tomek powiedział 2 months later:

    Wielce przydatna informacja – kilka godzin szukałem informacji jak rozwiązać ten problem…

  3. Avatar Krzysiek powiedział 3 months later:

    A mnie to nie pomogło… Używam wersji SVN, a mysql 5.0.38

  4. Avatar vitoo powiedział 5 months later:

    Witam, Mam mały problem… Używam najnowszej versji django (svn), pythona, oraz najnowszej ver. bazy mysql

    Jeśli w modelu określe pole w bazie z polskimi czcionkami np verbose_name = ‘Zależność’ podczas próbie syncdb dostaje błąd:

    “Non-ASCII character \xb3”

    Rozwiązanie zaproponowane tutaj przez autora (DATABASE_OPTIONS = {...}), ani tez ustawianie coding nie pomaga…

    pozatym na stronie są polskie czcionki, w bazie także sa poprawnie zapisywane.. ma może ktos jakis pomysł ?

    (plik models.py eydtowany w eclipse z kodowaniem utf8, i cp.. efekt niestety taki sam)

    z góry dzięki

  5. Avatar marcov powiedział about 1 year later:

    @vitoo: Spróbuj: verbose_name = u’Zależność’

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz