👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

MySQL. Grr.

Do konce ledna bych chtěl zprovoznit něco smysluplného na domovské stránce tohoto webu. Chvíli jsem zvažoval, jestli web udělat od nuly pomocí ASP.NET nebo jestli využít nějaký CMS. Od začátku jsem měl jasno, že pokud by to byl CMS, jednalo by se o Drupal, který jsem si oblíbil už dřív.

Pro ASP.NET hovořilo především to, že tuto technologii mám rád a při implementaci vlastního CMS bych se aspoň něco přiučil. Navíc předpokládám, že většina mých budoucích projektů bude v .NETu, takže ASP.NET je přirozenější platformou.

Na druhou stranu Drupal přináší širokou paletu funkcí, které ocením, fungují out-of-the-box a není potřeba je programovat, např. RSS, prohledávání webu, komentáře prakticky ke všemu apod. Drupal je navíc populární a prověřená platforma, takže by byla celková technická kvalita webu vyšší.

Nakonec převážil pragmatismus a rozhodnul jsem se pro Drupal. Tak jsem si ho stáhnul a jal se ho instalovat. Jak už jsem psal, instalace Drupalu není podporována grafickým rozhraním a je tak potřeba manipulovat přímo z databázovými tabulkami. A zde nastal problém. Primární databází pro Drupal je totiž MySQL, ke které jsem si během včerejšího večera vybudoval poměrně negativní vztah.

Spustil jsem instalační skript, který skončil několika SQL chybami, ale to jde patrně na vrub tomu, že Drupal 4.7 je zatím ve fázi beta. Horší bylo, že web vůbec nefungoval kvůli chybě „Illegal mix of collations“. MySQL je totiž tak fikaná, že podporuje různá kódování na mnoha úrovních:

  • na úrovni databáze
  • na úrovni tabulky
  • na úrovni sloupce
  • na úrovni serveru
  • na úrovni klienta
  • na úrovni připojení k databázi

Nejsem databázový expert a proto se nechci vyjadřovat, jestli je to dobře nebo špatně, každopádně pro mě jako koncového uživatele je životně důležité, aby s tím nenastal problém, protože jinak budu zcela ztracen. Co se nestalo – problém nastal (viz výše uvedená chyba).

Začal jsem proto po webu hledat řešení. Pěkný přehledový článek napsal Jakub Vrána. Byl dobrým úvodem do problematiky, ale ne řešením mého problému. Narazil jsem na mnoho diskuzních příspěvků k mému tématu, ale otázka nikdy nebyla k úplné spokojenosti zodpovězena. Většinou je jen poukázáno na to, že po mysql_connect je potřeba zavolat ještě mysql_query("SET CHARACTER SET xyz"). Skvělé pro vlastní web, ale ze zásady nerad šahám do zdrojáků CMS.

Hloupé je, že jsem nepřišel na to, jak kódování connection předat MySQL deklarativně. V oficiálním manuálu je v poznámkách uživatelů zmínka o tom, že do my.ini jde přidat init-connect='SET NAMES xyz', ale to mi taky nějak nefungovalo. Celé mi to ještě zpříjemňovaly chybami protkané programy MySQL Administrator a MySQL Query Browser, které čas od času padaly a velmi mi tak dodávaly na anti-mysqlovské náladě.

Výsledkem několikahodinového snažení je aspoň to, že mi Drupal běží s databázovým collation latin1_swedish_ci. Nic moc, ale opravdu se mi řešení nepodařilo najít. A to jsem zkušený googlař :)

Je zajímavé, jak světoznámé open source projekty PHP a MySQL zlobí. PHP je vůbec horor, kdy se člověk třese, co mu přestane fungovat po upgradu hostingu na příští verzi, a to nejen při změně hlavní verze, ale třeba i při změně z 5.0.4 na 5.0.5 (někteří jedinci, kteří si neberou servítky, rovnou označují autory PHP za bandu idiotů).

MySQL ale taky není projekt, který by si mě zrovna získal svojí kvalitou. Databáze to je vskutku primitvní, ale o to více naštve, když jsou s ní problémy. Kódování je velkou slabinou MySQL – nemyslím tím, že by tato vlastnost nebyla zajímavá nebo pro někoho nedůležitá, ale nám, běžným smrtelníkům, velmi komplikuje život. Navíc jsou nástroje pro MySQL plné chyb, což při řešení potíží rozhodně nepotěší. Škoda, že evoluční souboj nevyhrála třeba PostgreSQL

Zařazeno do kategorií | | |

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.