Egoblog.cz - Petr Kobelka

Nette a MSSQL

V tomhle postu popíšu úskalí, která mě potkala při tvorbě aplikace v Nette s požadavkem na propojení s MSSQL.


PHP | Komentáře (1) | Shlédnuto 2110 × | Vloženo: 19. března 2014

Vše začalo dobře, dostal jsem zakázku na tvorbu specializované aplikace, která poběží v uzavřeném intranetu, na webovém serveru a je nutné, aby komunikovala s MSSQL serverem. Aplikaci jsem začal psát v tě době ještě s Nette 2.0 (2.1 ještě nebylo úplně na světě).

To je jasné Nette\Database\Connection

Jasně, co na tom může být za problém že? Předal jsem správci požadavky, co potřebuji mít nainstalované na serveru s tím, že se na ně podíval a neměl by to být problém. Jaká naivita :-)

Dostal jsem zprávu, že je server připravený, tak jsem zajásal a jel aplikaci nainstalovat do testovacího provozu.

Achich ouvej, že jsem tam jezdil.

Přijel jsem a server neměl nainstalováno skoro nic. Ok, tak jsme projeli PHP info a předal jsem názvy knihoven, které je tam potřeba nainstalovat. Mj. PDO_MSSQL - chci přece používat Nette\Databse\Context abych si usnadnil práci a čitelnost kódu.

Při další zprávě, že je nainstalováno jsem byl už opatrnější a mé obavy se potvrdili. Místo pdo_mssql správce nainstaloval pouze mssql, což mi bylo celkem k ničemu. Znovu jsem mu tedy napsal, co je třeba za knihovnu.

Výsledkem další komunikace bylo, že správce nejspíš umí pouze CentOS a žádnou knihovnu na pdo_mssql nenašel. Měl jsem zato, že prostředí mělo být připraveno pro aplikaci, ale zřejmě jsem pak musel upravit aplikaci pro prostředí.

Rada k nezaplacení

Níkdy nepiště aplikaci, dokud nebude hotové prostředí, ve kterém má běžet!!! - Rada nad zlato

Jak tedy na to, já chci MSSQL na Nette

Za prvé jsem prohledával vše možné diskuze ale nenašel jsem žádné použitelné řešení. Mnoho útržků, které něco nastínili, jinak nic.

Za druhé jsem musel vyměnit knihovnu za Dibi s extension pro Nette [https://github.com/dg/dibi].

Jak jistě všichi znáte Microsoft, oni prostě milují svoje windows-1250 (cp1250) a tedy jakýkoliv pokus o změnu znakové sady selhal.

Tedy musím přepsat všecha čtení z databáze a konvertovat znakovou sadu z CP1250 na UTF-8. Stejně tak při ukládání musím hodnoty předtím překódovat z UTF-8 na CP1250. V Nette 0.9 měly formuláře ještě metodu setEncoding() a mohli jste změnit výchozí UTF-8 na požadovanou znakovou sadu. Dnes jede Nette čistě na UTF-8 a nic s tím neuděláte.

Závěrem k Nette a MSSQL

Hlavní je, že se mi podařilo najít řešení, které obejde a nějak vyřeší problém, který nastal kvůli tomu, že jsem musel přizpůsobit aplikaci prostředí místo, aby to bylo obráceně.

Za druhé jsem si odnesl velmi cennou radu, která mi v budoucnu ušetří mnoho nervů :-)

Dovětek

Teď jsem si uvědomil, že tam byl ještě jeden problém. Nškteré sloupce byly ve datovém typu NTEXT nebo NVARCHAR což je nějaká MS nativní věc, která uchovává data v UTF-8, taky super, co? :-( Tohle jsme ale celkem jednoduše vyřešili, sloupce se prostě musely změnit ja TEXT a VARCHAR.

 

Petr Kobelka | Egoblog.cz | Tvorba www stránek - www.petrkobelka.cz

Petr Kobelka
Autor je zkušeným web developerem a programátorem s více než 10 letými zkušenostmi. Pracuje jako programátor pro známou Olomouckou společnost zabývající se tvorbou internetových a intranetových řešení. Spolu se zaměstnáním pracuje na volné noze a zabývá se tvorbou internetových stránek. Ve volném čase rád fotí, jezdí na kole, plave a cestuje.

Komentáře

E-mail je potřeba pouze pro vygenerování Gravataru!

1
matak | vloženo 7. dubna 2016
Zajímalo, by mne jestli si v tomhle pokročil? Dibi používat nechci, proč si vůbec zavrhl freetds? Nette/Database na to driver má.

A to PDO s MSSQL se nepodařilo rozchodit?

Já mám asi 7 let starou aplikaci napsanou v dibi, která běží přímo na mssql server a teď bych ji potřeboval přepsat, aby běžel ze server s linux vzdáleně.

Chtěl bych používat Nette\Database. Tak zkoumám co s tím.

Petr Kobelka
Ahoj a díky za komentář.

Nepokročil jsem dále, protože to nemusím řešit. Aplikace běží na starém železe (a ve starém systému) a správce tam freetds nedokázal korektně nahrát.

Blog píše Petr Kobelka

Petr Kobelka - egoblog.cz

Žádám všechny, kteří mají zájem vkládat komentáře, aby se řídili pravidly NETikety. Komentáře, porušující tato pravidla můžou být bez varování smazány.