Portál AbcLinuxu, 27. dubna 2024 06:06


Dotaz: OT: MySQL, db v latin2, pri collation latin2_cokoliv neulozi cestinu

3.5.2006 15:56 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
OT: MySQL, db v latin2, pri collation latin2_cokoliv neulozi cestinu
Přečteno: 377×
Odpovědět | Admin
Zdravim

Cestina v MySQL je vecne tema...

Z drevnich dob pochazi situace, kdy nastaveni databaze, tabulek i sloupcu bylo latin1 a latin1_swedish_ci. Data se tam ukladala v cp1250. No proste jsem nevedel jak se s tim zachazi...

Rozhodl jsme se to dat do poradku. Nejprve jsem zmenil kodovani databaze na latin2 a i kazdou tabulku jsem zmenil na latin2. Tim doslo k tomu ze se mi šŠžŽ prepsaly na otazniky, ktere jsem rucne opravil (zas tak moc dat tam neni).

Problemem vsak je ze razeni sloupci zustalo na latin1_swedish_ci.

Pri zakladani nove tabulky uz ted volim latin2 a tak je vychozi razeni latin2_general_cs.

Problem je, ze nemuzu provadet joiny, jelikoz to rve nejakej nesoulad v collation ruznych tabulek.

Reseni se nabizi, latin1_swedish_ci prepsat na latin2_general_ci. Pripadne na latin2_czech_cs, ale to pro me neni vubec dulezite.

Zkousel jsem rucne v PhpMyAdminovi predelat razeni na latin2_.... Zkousel jsem data exportovat, nahradit vyskyty latin1_swedish_ci za latin2_general_ci. Zkousel jsem skript odsud: http://php.vrana.cz/prevod-kodovani-mysql.php.

Vysledkem vseh zpusobu bylo vzdy to same: misto vetsiny ceskych znaku se mi zobrazujou otazniky. Dokonce jsem zjistil, ze ani do novych tabulek uz vytvorenych s razenim latin2_general_ci se ulozi jen nektere ceske znaky. Ted uz se ale nejedna o sSzZ, cili wokenni kodovani v tom uz nehraje roli.

Vypozoroval jsme ze jakmile ma sloupec nastaveny collation na latin2_... tak do nej nemuzu ulozit cestinu.

Urcite s tim souvisi iu to, ze kdyz naimportuju do databaze puvodnbi data s collation latin1_swedish_ci a v PHP je ctu, je vse zobrazeno v poradku. V PHP kodu ted nemam zadne nastavovani kodovani.

Kdyz jsme na radu nize uvedenych webu do PHP kodu hned za pripojeni k databazi pridal "mysql_query('SET CHARACTER SET latin2');" vysledkem byly opet otazniky misto cestiny.

MySQL je 5.0.19 ze slackwaru, na konfigurak jsme vubec nesahal. PhpMyAdmina mam staryho 2.5.7-pl1, protoze novejsi zobrazi nejen otazniky, ale totalne zmrsi cestinu i tam kde to ve starem adminovi funguje bez probelmu. Zrejme mi v systemu neco chybi nebo je tam bug.

Prozkoumal jsem tyto weby:

http://php.vrana.cz/mysql-4-1-kodovani.php

http://forum.builder.cz/read.php?21,1557932

Nevite nekdo co s tim?

Zdenek
www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.5.2006 16:52 iji | skóre: 29
Rozbalit Rozbalit vše Re: OT: MySQL, db v latin2, pri collation latin2_cokoliv neulozi cesti
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na tvoji otazku bohuzel neodpovim, ale odpoved mne zajima :)
Nebylo by vsak dnes vhodnejsi misto latin2 volit utf8?
3.5.2006 16:55 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: OT: MySQL, db v latin2, pri collation latin2_cokoliv neulozi cesti
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přiznám že jsem to nečetl celé :-).

Používej SET NAMES místo SET CHARACTER SET, je to spolehlivější (to druhé nastaví jedno kódování podle databáze, takže tam může být v podstatě cokoliv).

Pokud už máš data v tabulkách dobře, ale blbě nastavené collation, tak musíš převádět přes nějaký binární typ (např. BLOB), tím se data nezmění. Při přepnutí z latin1 na latin2 se data převedou z latin1 na latin2 a samozřejmě to dopadne špatně.

A vůbec je tu na to FAQ.
Weblate - překládání přes web | Gammu SMSD - posílání SMS | Blog
3.5.2006 21:35 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
Rozbalit Rozbalit vše Re: OT: MySQL, db v latin2, pri collation latin2_cokoliv neulozi cesti
Dik za tip. SET NAMES jsem na webu videl taky, ale bylo to spis nedoporucovano. Nicmene ty jses odbornik.

Ten prevod pres BLOB dela skript, kterej jsme zminil. Ze prio zmene collation se data konvertuji jsem si uz precetl. Reseni byly nabidnuta dve. Prevod pres BLOB nebo export do textoveho SQL, rucni nahrazeni collation a import zpet do database. Vysledkem obou byly otazniky.

S tim utf8 to mozna jeste zkusim, cetl jsem ze to jeste porad zlobi.

Zdenek
www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf
3.5.2006 21:59 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
Rozbalit Rozbalit vše Re: OT: MySQL, db v latin2, pri collation latin2_cokoliv neulozi cesti
Já nevím proč s tím všichni mají tolik problémů. O víkendu jsem převedl hromadu databází v češtině z MySQL 3.23.cosi na 4.1, všechno na první pokus bez problémů :-).
  1. V phpMyAdminovi zapnuté překódování
  2. Export tabulek ze staré verze do utf-8
  3. V nové MySQL vytvořit databázi s nějakým utf-8 collation
  4. Do této databáze nahrát dump v utf-8 (a zadat že je v utf-8, třeba přidat na začátek SET NAMES)
1. + 2. se dá nahradit mysqldumpem a převodem v iconvu nebo něčem podobném.
4.5.2006 09:31 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
Rozbalit Rozbalit vše Re: OT: MySQL, db v latin2, pri collation latin2_cokoliv neulozi cestinu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Problem byl prosty, mily Watsone. Za vsecho mohl stary PhpMyAdmin.

Zde je psano, ze nejstarsi verze admina, ktera je vhodna pro dobrou praci s ruznymy kodovanimi je 2.6.3. Jenze ja mel 2.5.7. Tak jsem zkusil verzi 2.6.4-pl4 a ejhle, zacalo fungovat jak utf8 tak i latin2.

Nakonec jsem web i databazi nechal v latin2.

Pouzil jsem metodu exportu do souboru, nahrazeni vsech vyskytu latin1 za latin2 a zase import. Mimochodem uplůne stejne to slo pro utf8, jen jsem to jeste mezitim konvertovat latin2->utf8 pomoci iconvu.

Druhy problem byl skutecne v mysql_query('SET CHARACTER SET latin2');. Nekde to jeste porad zlobilo. Doporucovane MySQL_query("SET NAMES 'latin2'"); funguje jak ma.

Takze ted jsem snad konecne happy.

Zdenek
www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.