Přenos SQL přes JSON rozbije diakritiku

Smokie

Přenos SQL přes JSON rozbije diakritiku
« kdy: 21. 09. 2011, 13:43:50 »
Zdravím,

ide o synchronizáciu dvoch mysql databáz. Obidve sú v UTF-8, koláciu majú v UTF-8 a aj stľpce majú UTF-8.

Synchronizácia prebieha tak, že sa obsah databázy uloží do json cez funkciu json_encode, ktorá iné data než v UTF-8 ani nepríjme a potom sa tieto json súbory skriptom stiahnu a na localhoste rozbalia a načítajú do lokálnej databázy. Tam už nastáva problém, lebo už je diakritika poškodená. Zisťoval som cez mb_detect_encoding aké je kódovanie pred uložením do json, pri výbere z databázy, pri uložení do databázy a vždy mi odpovie, že ide o UTF-8.

Rovnaký problém je zase pri ceste späť kedy sa z lokálnej databázy stiahnú údaje do .sql súborov a cez ftp sa skriptom odošlú na vzdialenú stranu.

Skúšal som už všeličo možné, či už pred selectami vykonať SET CHARACTER SET utf8 alebo to kódovať cez iconv alebo už neviem čo. Ale stále sa neviem cez to dostať.

Budem veľmi vďačný za akékoľvek nápdy a rady.
« Poslední změna: 21. 09. 2011, 17:00:03 od Petr Krčmář »


Sten

Re: Problém s diakritikou pri prenose cez json
« Odpověď #1 kdy: 21. 09. 2011, 14:05:28 »
Zkuste místo
Kód: [Vybrat]
SET CHARACTER SET utf8použít
Kód: [Vybrat]
SET NAMES utf8

Smokie

Re: Problém s diakritikou pri prenose cez json
« Odpověď #2 kdy: 21. 09. 2011, 16:39:42 »
Vyskúšal som, ale bohužiaľ to problém nevyriešilo. Skúsil som to dať pred select, ktorý vyberá tie údaje na localhoste do adminu vo WordPresse. Potom som to skúsil dať do selectov, ktoré na vzdialenej strane vyberú údaje z databázy ako prvé a posielajú ich na spracovanie do json súborov. Ale ani tam to nepomohlo, dokonca to bolo horšie, čiže ako keby sa to už viackrát prekódovalo.

Zopper

  • *****
  • 657
    • Zobrazit profil
Re: Přenos SQL přes JSON rozbije diakritiku
« Odpověď #3 kdy: 21. 09. 2011, 19:40:32 »
Zkus ověřit, jestli server opravdu stáhl json v UTF8 - taky to může brát jako nějaké jiné kódování.

jiří

Re: Přenos SQL přes JSON rozbije diakritiku
« Odpověď #4 kdy: 21. 09. 2011, 21:34:37 »
ten sql soubor je taky v utf-8? Na http://cz.php.net/manual/en/function.fopen.php je zmínka v komentářích o vytváření souborů v utf-8. A co takhle json ještě zakódovat pomocí base64?


Smokie

Re: Přenos SQL přes JSON rozbije diakritiku
« Odpověď #5 kdy: 26. 09. 2011, 15:01:29 »
Tie subory su podla vsetkeho v UTF8. Aj obidve databazy su v UTF8. Vsade je nastavena collacia utf8_slovak_ci. Na oboch stranach.

Na oboch stranach sa taktiez vypisuje po zadani
Kód: [Vybrat]
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

Kód: [Vybrat]
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Ale co nedokazem pochopit je to, ze mysql_client_encoding na vzdialenej strane pri exportovani dat do json mi vypisuje latin1... A neviem ci prave toto nie je ten problem. Ja by som tam cakal utf8, neviem odkial sa tam latin1 moze brat.

Smokie

Re: Přenos SQL přes JSON rozbije diakritiku
« Odpověď #6 kdy: 26. 09. 2011, 15:02:29 »
Obidve databazy som vycistil a skusal to s novymi datmi, ktore boli vlozene cez wp-admin, ktory mal utf8 kodovanie. Neviem kde sa tam to latin1 moze brat.

Smokie

Re: Přenos SQL přes JSON rozbije diakritiku
« Odpověď #7 kdy: 26. 09. 2011, 15:17:56 »
Tak sa mi podarilo pomocou
Kód: [Vybrat]
mysql_set_charset('utf8',$cnx); dosiahnut to, ze
Kód: [Vybrat]
mysql_client_encoding($cnx); mi vrati utf8 namiesto latin1.

Ale aj tak sa po prenose z éíáýžťčšľ stane éíáýžťčšľ. To uz vyzera poriadne divoko... Ako x-krat pozute...

Smokie

Re: Přenos SQL přes JSON rozbije diakritiku
« Odpověď #8 kdy: 26. 09. 2011, 16:45:44 »
Nakoniec je vsetko vyriesene. :)

Stacilo vsetko dat do UTF8 ale hlavne na spravnych miestach nastavit mysql_set_charset.