Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Izgubljen u encodingu...

[es] :: MySQL :: Izgubljen u encodingu...

Strane: 1 2

[ Pregleda: 6132 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: Izgubljen u encodingu...16.09.2010. u 08:19 - pre 165 meseci
Jesi ovako mislio?
Nista se nije promjenilo.

Code:
mysql> desc vesti;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| id        | int(11)  |      |     | 0       |       |
| datum     | date     | YES  |     | NULL    |       |
| naslov    | tinyblob | YES  |     | NULL    |       |
| uvod      | blob     | YES  |     | NULL    |       |
| vest      | blob     | YES  |     | NULL    |       |
| thumbnail | tinyblob | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> select hex(naslov) from vesti limit 1;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| hex(naslov)                                                                                                                                                                            |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| D0A0D095D097D0A3D09BD0A2D090D0A2D09820D09AD09ED09DD09AD0A3D0A0D0A1D09020323030332E20D093D09ED094D098D09DD095202D2022D09FD09BD090D09DD098D09DD09020D09820D097D094D0A0D090D092D089D09522 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select naslov from vesti limit 1;
+---------------------------------------------------------------------------------------------+
| naslov                                                                                      |
+---------------------------------------------------------------------------------------------+
| Ð ÐÐУÐТÐТРÐÐÐÐУРСР2003. ÐÐÐÐÐР- "ÐÐÐÐÐÐРРÐÐРÐÐÐÐ" |
+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter table vesti change naslov naslov varchar(150) character set utf8 default NULL;
Query OK, 132 rows affected (0.02 sec)
Records: 132  Duplicates: 0  Warnings: 0

mysql> select hex(naslov) from vesti limit 1;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| hex(naslov)                                                                                                                                                                            |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| D0A0D095D097D0A3D09BD0A2D090D0A2D09820D09AD09ED09DD09AD0A3D0A0D0A1D09020323030332E20D093D09ED094D098D09DD095202D2022D09FD09BD090D09DD098D09DD09020D09820D097D094D0A0D090D092D089D09522 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> desc vesti;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int(11)      |      |     | 0       |       |
| datum     | date         | YES  |     | NULL    |       |
| naslov    | varchar(150) | YES  |     | NULL    |       |
| uvod      | blob         | YES  |     | NULL    |       |
| vest      | blob         | YES  |     | NULL    |       |
| thumbnail | tinyblob     | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Izgubljen u encodingu...16.09.2010. u 08:36 - pre 165 meseci
da tako, nesto nije u redu ...

ako je HEX() bloba

D0A0D095D097D0A3D09BD0A2D090D0A2D09820D09AD09ED09DD09AD0A3D0A0D0A1D09020323030332E20D093D09ED094D098D09DD095202D2022D09FD09BD090D09DD098D09DD09020D09820D097D094D0A0D090D092D089D09522

i kada ga prebacis u UTF8 ostane:

D0A0D095D097D0A3D09BD0A2D090D0A2D09820D09AD09ED09DD09AD0A3D0A0D0A1D09020323030332E20D093D09ED094D098D09DD095202D2022D09FD09BD090D09DD098D09DD09020D09820D097D094D0A0D090D092D089D09522

to znaci da je "validan" ... tj, ako se ja dobro secam, da nije mysql bi trebalo da kuka ... mada to je uvek "pitanje" ...

kada iz PHP-a uradis "SET NAMES 'UTF8'; SELECT naslov FROM vesti;" i spucas to direkt browseru kome je enkoding utf8 sta ti prikaze browser u jednom a sta u drugom slucaju?

koji bese mysql tu kod tebe moram da proverim nesto, ne secam se vise kako se ponasa ova konverzija sa "pogresnim" enkodingom
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Izgubljen u encodingu...16.09.2010. u 08:51 - pre 165 meseci
nesto ti tu nije ok .. pazi ovako, kada taj hex ubacis u fajl:

Code:

<?php
$x = 'D0A0D095D097D0A3D09BD0A2D090D0A2D09820D09AD09ED09DD09AD0A3D0A0D0A1D09020323030332E20D093D09ED094D098D09DD095202D2022D09FD09BD090D09DD098D09DD09020D09820D097D094D0A0D090D092D089D09522';

$t = '';

$f = fopen("kita.txt", "w") or die("greska");

for ($i=0;$i<strlen($x);$i+=2){
  $p = hexdec( substr($x,$i,2));
  fwrite($f,  chr($p));  
  $t .= chr($p);
}
fclose($f);

if (is_validUTF8($t)){
  echo 'validan utf8 string:' . $t . "\n";
} else {
  echo "nije validan string\n";
}


function is_validUTF8($str) //http://php.net/manual/en/function.utf8-encode.php
{
    // values of -1 represent disalloweded values for the first bytes in current UTF-8
    static $trailing_bytes = array (
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
        -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
        -1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
    );

    $ups = unpack('C*', $str);
    if (!($aCnt = count($ups))) return true; // Empty string *is* valid UTF-8
    for ($i = 1; $i <= $aCnt;)
    {
        if (!($tbytes = $trailing_bytes[($b1 = $ups[$i++])])) continue;
        if ($tbytes == -1) return false;
       
        $first = true;
        while ($tbytes > 0 && $i <= $aCnt)
        {
            $cbyte = $ups[$i++];
            if (($cbyte & 0xC0) != 0x80) return false;
           
            if ($first)
            {
                switch ($b1)
                {
                    case 0xE0:
                        if ($cbyte < 0xA0) return false;
                        break;
                    case 0xED:
                        if ($cbyte > 0x9F) return false;
                        break;
                    case 0xF0:
                        if ($cbyte < 0x90) return false;
                        break;
                    case 0xF4:
                        if ($cbyte > 0x8F) return false;
                        break;
                    default:
                        break;
                }
                $first = false;
            }
            $tbytes--;
        }
        if ($tbytes) return false; // incomplete sequence at EOS
    }       
    return true;
}

?>


fajl bude validan utf8 cirilica (REZULTATI KONKURSA 2003. GODINE - "PLANINA I ZDRAVLjE") i ova funkcija koja proverava validnost potvrdi da je string validan .... tako da bice da imas negde gresku kod sebe


Prikačeni fajlovi
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: Izgubljen u encodingu...16.09.2010. u 10:16 - pre 165 meseci
Radi sa set names utf8....
Provjericu kasnije, mislim da to ima veze sa verzijom php-a i mysql klijenta sa kojim je kompajliran isti, jer na novijim serverima imam iste slucajeve ali nije potrebno eksplicitno set names utf8.
Ovdje je u pitanju php 4.4.7 i mysql 4.1.22.

Imacu jos jedno pitanje kasnije i mislim da je to to :)
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Izgubljen u encodingu...16.09.2010. u 10:19 - pre 165 meseci
pazi, 4.1 nije najsrecnije resenje sa enkodingom, tu je prvi put dodata podrska ...

UVEK iz PHP-a radi set names inace php prica sa bazom kao latin1, samo slucajno mozes da naletis na php konektor koji prica utf8, dakle kad ne stavis set names generises smece
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: Izgubljen u encodingu...16.09.2010. u 13:24 - pre 165 meseci
Evo, imam sad situaciju gdje hex nije isti nakon konverzije

Ovo je prije konverzije
Code:

613A343A7B733A353A227374796C65223B733A313A2231223B733A31343A22646973706C617977616974696E67223B733A313A2231223B733A31343A22646973706C61796D6F64756C6573223B693A303B733A373A22636F6E74656E74223B733A313039353A22696E6465782E7068707C506FE86574616B7C506F76726174616B206E61206F736E6F766E7520737472616E6963752E2E2E4C494E4553504C4954757365722E7068707C4D6F6A206E616C6F677C41646D696E697374726163696A61206C69E86E6F67206E616C6F67612E2E2E4C494E4553504C49545B4D657373616765735D7C5072697661746E6520706F72756B657C5072697661746E6520706F72756B652064727567696D20E86C616E6F76696D61206F766F672073616A74612E2E2E4C494E4553504C495461646D696E2E7068707C41646D696E697374726163696A617C41646D696E697374726163696A612073616A74612E2E2E4C494E4553504C4954757365722E7068703F6D6F64756C653D55736572266F703D6C6F676F75747C4F646A6176617C4F646A6176612E2E2E4C494E4553504C49547C7C4C494E4553504C49547372735F666F72756D7C466F72756D7C466F72756D20536176657A612E2E2E4C494E4553504C49545B546F706963735D7C54656D657C53706973616B206E6F766968206E61736C6F7661206E61206F766F6D2073616A74752E2E2E4C494E4553504C49545B53656374696F6E735D7C53656B63696A657C4F7374616C6920736164729E616A69206F766F672073616A74612E2E2E4C494E4553504C49545B4E6577735D7C56657374697C506F736C65646E6A65207665737469206E612073616A74752E2E2E4C494E4553504C49545B5375626D69745F4E6577735D7C506F9A616C6A6920E86C616E616B7C506F9A616C6A6920E86C616E616B20696C6920766573742E2E2E4C494E4553504C49545B4641515D7C506974616E6A617CC86573746F20706F737461766C6A616E6120706974616E6A612E2E2E4C494E4553504C49545B5365617263685D7C5472619E697C5072657472619E6976616E6A65206F766F672073616A74612E2E2E4C494E4553504C49545B446F776E6C6F6164735D7C446F776E6C6F6164737C46616A6C6F7669207A6120707265757A696D616E6A652E2E2E4C494E4553504C49545B5765625F4C696E6B735D7C576562206C696E6B6F76697C4C696E6B6F7669206B612064727567696D2073616A746F76696D612E2E2E4C494E4553504C49545B53746174735D7C53746174697374696B617C53746174697374696B61206F2073616A74754C494E4553504C49545B4D656D626572735F4C6973745D7C4C6973746120E86C616E6F76617C4C6973746120726567697374726F76616E696820E86C616E6F76612073616A74612E2E2E4C494E4553504C49545B5265636F6D6D656E645F55735D7C507265706F7275E8697465206E61737C507265706F7275E8697465206F76616A2073616A742064727567696D612E2E2E4C494E4553504C4954696E6465782E7068703F6E616D653D53656374696F6E73267265713D7669657761727469636C652661727469643D32347C3C623E4B6F6E74616B743C2F623E7C535253202D206B6F6E74616B7420696E666F726D6163696A65223B7D


Onda uradim
alter table t1 change content content text character set utf8 NOT NULL default '';

i nakon toga hex je
Code:

613A343A7B733A353A227374796C65223B733A313A2231223B733A31343A22646973706C617977616974696E67223B733A313A2231223B733A31343A22646973706C61796D6F64756C6573223B693A303B733A373A22636F6E74656E74223B733A313039353A22696E6465782E7068707C506F

Sta se tu desi?

Da li bih imao nekih problema ako bi ostavio sva ova polja u blob formatu?
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Izgubljen u encodingu...16.09.2010. u 17:41 - pre 165 meseci
desi se to da u blobu nije validan utf8 string i kada naidje na prvi nevalidan karakter mysql izignorise ostatak ...

ako pustis taj string kroz onaj php primer koji proverava validnost videces da ce da vrati da string nije validan.

sto se tice toga da ih ostavis kao blob, nemas pretragu po tim poljima onda, nemas ideju "sta je unutra"
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: Izgubljen u encodingu...17.09.2010. u 10:32 - pre 165 meseci
A mogu li to kako da popravim, taj string?
Sta da radim onda sa ovim.. mora da ostane na staroj bazi?? ufff
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Izgubljen u encodingu...17.09.2010. u 16:48 - pre 165 meseci
paaaaaaa .. ako ga vidis na web-u kako treba, copy sa web-a utf string pa paste ce odraditi posao ... rucno da ga popravljas - imas taj source u php-u koji testira string pa mozes da vidis uz pomoc njega tacno gde ti je problem..

sta da radis - proveris koliko imas takvih entrija koji su "razliciti" ... i ako nema previse, ispravis ih "na misice" ...

ima isto fora koja je meni uspela nekoliko puta

uradis mysqldump u fajl (obavezno NE stavis --hex-dump) ... on to spuca u txt ... onda taj txt otvoris u nekom "iskusnom" editory koji zna sta je to enkoding, kazes mu da je fajl utf8, promenis definicije polja u utf8 (samo create menjas, ostavis podatke takvi kakvi su), snimis fajl (u ovom trenutku ce veci broj editora "popraviti" sitne byte greske koje postoje (mislim da sam zadnji put to popravljao sa KATE) i onda to importujes nazad u mysql ... ovde ti je najveci cim da li ce text editor umeti da odradi "popravku" (meni je kate odradio posao par puta gde su bile sitne greske na mnogo mesta - dok je glupi gedit bio potpuno nesposoban) ... takodje ako je fajl "velik" imas problem posto svi ovi pokusavaju to da usisaju u ram tako da - veliki swap + mnogo strpljenja, zadnji put kada sam to radio ucitavao je fajl oko 2h a snimao isti oko 4h!!! tu je zgodno da posebno exportujes data a posebno definicije, posto samo definicije menjas, za data je bitno da ucitas fajl, dodas jedan razmak i snimis ga, bitno je samo da editor zna da je utf8 enkoding u pitanju

 
Odgovor na temu

ColdKeyboard
Sasa Karanovic
Hardware and Firmware Engineer
Toronto, Canada

Član broj: 31924
Poruke: 868
*.dynamic.sbb.rs.

Jabber: ColdKeyboard
Sajt: www.SasaKaranovic.com


+11 Profil

icon Re: Izgubljen u encodingu...12.10.2010. u 15:35 - pre 164 meseci
Probao sam sve moguce varijante koje su gore navedene.

Uspio sam sa pretvaranjem polja u blob pa iz blob-a u varchar sa UTF-8.
Time sam dobio sve naslove u tabeli bez kvakica.

Ali problem je kada trebam da izmjenim TEXT polje. Sve radi ok dok ne pocne vracanje nazad u UTF-8, tada MYSQL 'zezne' tabelu tako sto
nakon pretvaranja dobijem polje koje umjesto cijele vrijednosti imam samo vrijednost do prvog slova sa kvakicom, poslije toga nema nista :S

Da li ima neki nacin da uradim backup pa da u nekom text editoru uradim replace tih znakova sa kvakicama?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Izgubljen u encodingu...12.10.2010. u 15:46 - pre 164 meseci
naravno . mysqldump ..

elem, ono sto ti je najverovatnije problem je da ti je sadrzaj u text polju u pogresnom enkodingu daj jedan slog koji ne valja iz originalne tabele

select polje, hex(polje) from tabela where id=nesto into outfile '/tmp/uploadujnaforum';


 
Odgovor na temu

[es] :: MySQL :: Izgubljen u encodingu...

Strane: 1 2

[ Pregleda: 6132 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.