Autor | Zpráva | ||
---|---|---|---|
Chuchycek Profil |
#1 · Zasláno: 9. 3. 2016, 09:39:45
Ahoj,
mám problém s kodováním MsSQL databáze má kodování cp1250 a v php mi běží aplikace na nette + dibi s kodováním utf8. Nemám možnost změnit kodování na MsSQL serveru. Prosím tedy o radu. Díky H. |
||
Zechy Profil |
|||
Chuchycek Profil |
#3 · Zasláno: 9. 3. 2016, 10:54:59
To se mi zrovna nezdá jako čisté řešení..
|
||
Zechy Profil |
Chuchycek:
Jak je ve vláknu psáno, existuje možnost posílat to s N' prefixem do nvarchar sloupce - tedy třeba INSERT INTO some_table (some_nvarchar_column) VALUES(N'Some value') Ale mě osobně z toho kolaboval celý webserver při dlouhých řetězcích na dibi, tudíž jsem to musel takhle obcházet. |
||
Chuchycek Profil |
#5 · Zasláno: 9. 3. 2016, 12:51:53
A něco globálnějšího pro již fungující aplikaci?
|
||
Zechy Profil |
Osobně i v práci máme pro databázové modely zavedené ERM a v základní třídě, ze které ostatní entity dědí, při získávání hodnot pro insert či update do dibi se pak dále řídíme dle anotací. Když kolegové v práci experimentovali s N' prefixy, řídili se tím, že proměnná má uvedeno @var string, já si ve svém aplikaci zase přidával vlastní anotaci @unicode, protože ne všechny řetězce jsem potřeboval takto převádět.
Takhle se pak zajistilo, že ať se ukládala jakákoli entita, tak při generování dotazu se automaticky provedlo pro Dibi to, co mělo. Ať už se doplnil N' prefix nebo se to prohnalo tím procesem z [#2]. |
||
Časová prodleva: 3 dny
|
|||
tatyalien Profil |
#7 · Zasláno: 12. 3. 2016, 21:58:27
Nahoď si jinou knihovnu na komunikaci místo mssql třeba php_pdo_sqlsrv, ta podporuje utf8 a nemusí se tak všechny data překonvertovávat pomocí iconv...
|
||
Zechy Profil |
#8 · Zasláno: 12. 3. 2016, 22:01:09
tatyalien:
Dibi defaultně využívá php_pdo_sqlsrv. Ono to sice komunikuje v UTF-8, ale MSSQL utf-8 nezná, pro ní to prakticky neexistuje. Proto se používají nvarchary a N' prefixy, kdy se databázi řekne, že se jedná o unicode řetězec, a tudíž se pak uloží tak, jak má. A ochcávačka s iconv... To je tím, že dibi při dlouhém řetězci může kolabovat. |
||
tatyalien Profil |
Zechy:
Aha, já jsem na lokálu požíval právě knihovnu mssql a dibi s ní mělo problém, že nebrala v potaz charset na utf8, po nahození knihovny php_pdo_sqlsrv to začalo fachat. Ale nezkoušel jsem extra dlouhé řetězce. |
||
Zechy Profil |
tatyalien:
Tak někdy to funguje naprosto bez problémů - řetězec se uloží jak má, třeba v práci nemusíme používat N', aby to nerozbilo kodování. Ale když jsem to dělal pro svůj vlastní projekt, tak i přes nastavení kodování na Czech jsem musel použít N' prefix a tu byl problém - Když do dibi přišel třeba řetězec o 700 znacích, tak při generování dotazu se něco zvrtlo a restartoval se celý apache. Je to popsaný v odkazu z [#2] :). |
||
Časová prodleva: 9 let
|
0