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

Izgubljen u encodingu...

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

Strane: 1 2

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

5h0ck
Beograd

Član broj: 14896
Poruke: 322
..8.252.195.static.beotel.net.



+1 Profil

icon Izgubljen u encodingu...10.03.2010. u 03:24 - pre 171 meseci
Sve je radilo super, a onda su mi ovi iz hostinga blokirali bazu dok nešto ne popravim, kada sam popravio i kada su pokusali da vrate bazu - nije je bilo, pa su je pokusali vratiti iz bekapa, ali onda su neki karakteri poludeli, pitaj q šta se tu desilo, a ja ne znam kako da vratim, kako da konvertujem, u šta da konvertujem...

Ovo sve zvuči malo konfuzno, ja sam konfuzan i umoran, pa ajde da probam da iznesem barem neke činjenice:
- strane su mi utf-8
- collation baze je utf8_unicode_ci
- ovako mi je izgledao upis u bazi pre: Unošenje foto-aparata, kamera i sl. je takoÄ‘e ZABRANJENO i isti će biti oduzimani na ulazu!
- nakon vraćanja baze iz njihovog bekapa: Unošenje foto-aparata, kamera i sl. je takoÄ‘e ZABRANJENO i isti će biti oduzimani na ulazu!
- nakon vraćanja baze iz mog bekapa: Unošenje foto-aparata, kamera i sl. je takoÄ‘e ZABRANJENO i isti će biti oduzimani na ulazu!

Ne znam šta da radim... Pomažite molim vas...
 
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...10.03.2010. u 04:45 - pre 171 meseci
vec sam jednom nogom u krevetu ali .. evo na brzaka jedan primer

takođe

ovo "dj" koje ti ovde fali je dvobajtni utf8 karakter (0xC4 0x91)

ako ti ovo posaljes "kako treba" u mysql (klijent koristi utf8 enkoding) mysql ce taj jedan karakter da zapise kao 3 bajta (0x00 0xC4 0x91).
ako ti uradis "vrlo cestu glupost" i klijent ti koristi latin1 enkoding a misli da je utf (kao na primer php sa kojim nisi odradio set names posle konekcije) ti ces mysql-u da posaljes 2 latin1 karaktera od kojih ce svaki da bude zapisan kao 3 bajtni utf, te ce 0xC4 latin1 karakter (to veliko slovo A sa tackicama) biti zapisano kao neka tri bajta i onaj 0x91 kao jos tri i to je 6 bajtova koje ti vidis u takođe

da bi to sve radilo kako treba (vratio bekap, imao "korisne podatke" u bazi, imao ok prikaz na webu ..) mora da se potrefi

1. da je sve u bazi kako treba .. dakle da je to slovo "dj" u bazi jedan karakter (3 bajta) a ne 2 karaktera po tri bajta
2. da je sve u aplikaciji kako treba (dakle da se pravilno setuje enkoding konekcije izmedju klijenta i servera)

to ce da "deluje ok" u slucaju da je u bazi smece a da ga php takvog ocekuje .. tako da ce on onih 6 bajtova koje dobije da pljune browseru kao 2 latin1 karaktera a browser ce da to isparsira kao jedan utf karakter posto mu to pise u hederu.

u zavisnosti od toga sta imas u sql fajlu iz koga radis restore relativno je lako (nema mnogo nasih karaktera) da napises kratak skript koji ce da ti uradi search & replace i da upises umesto tih 6 bajtova za "dj" koje verovatno imas u sql- fajlu 2 bajta tj jedan utf karakter ... onda obavezno na pocetku sql fajla setujes pravilno enkoding (set names ..) i onda restorujes to nazad ...

ima i "nekad brza" varijanta da restorujes u latin1 / prebacis u bin / vratis u utf8 ali to se isplati samo ako imas mnogo karaktera .. sa nasih 5-6 karaktera, brzi ti je search & replace

onda moras da sredis app .... tamo gde pravis konekciju - setuj koji je enkoding iste (set names ..)

sorry sto ne mogu detaljnije ali 0543 .. budan sam vec vise od 48h moram da zabodem malo ... nadam se da ti je ovo dovoljno jasno

p.s. vrlo verovatno mozes da "zakrpis" problem (ako je frka za downtime) tako sto ces da samo tamo gde setujes konekciju da kazes "set names 'latin1'" (da latin1 umesto utf8) i probas dal ce to da proradi ... moguce da je hosting provider promenio default klijentski enkoding... ali obrati paznju da to i ako proradi - i dalje ti je u bazi "smece" - tj u bazi ti je i bilo smece samo to nisi znao
 
Odgovor na temu

5h0ck
Beograd

Član broj: 14896
Poruke: 322
..8.252.195.static.beotel.net.



+1 Profil

icon Re: Izgubljen u encodingu...10.03.2010. u 09:50 - pre 171 meseci
Bogdane, hvala ti puno na opširnom odgovoru u sitne sate. Imam još par pitanja na osnovu tvog odgovora...

"dakle da je to slovo "dj" u bazi jedan karakter" - Jel to znači, da u bazi treba umesto takoÄ‘e pisati baš takođe ili...?

I ako bi mi samo još malo pomogao oko skripte za konvertovanje i toga šta on tačno treba da konvertuje... I mislim da tu imam problem sa ćirilicom, ima je dosta. Tačnije, cela baza je podosta velika (35mb), 3 godine pisanje raznih vesti, blogova, komentara...

Što se set names-a tiče i to sam probao i promenio nekoliko charset-a, ali je rezultata bio da jedne kerefeke zameni drugima...

Hvala još jednom na pojašnjenom odgovoru, sada mi je sa te neke strane jasnije, ali mi i dalje nije jasno zašto se bilo šta promenilo prilikom bekapovanja, i da li, ako je već nešto promenilo taj karakter u drugi, zašto ne postoji podjednako lak način da uradi obrnuto... :/

Kako ću znati da nemam smeće u bazi?
 
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...10.03.2010. u 19:26 - pre 171 meseci
nema na cemu ... glava mi puca ceo dan tako da cu opet ukratko ... (ono sto me cudi je da niko nije priskocio u pomoc a sigurno ima bar 10 ljudi koji prate forum i znaju kako da rese taj problem ... i svi cute ko zaliveni :( )

ne vredi ti da pravis skript za konvertovanje sql-a ako imas tu i cirilicu ..

35M je "malecna baza" ... aj to spakuj i uploaduj negde i posalji mi (na pp ili na mail) odakle da skinem ... ako nemas gde da uploadujes reci pa da vidimo neki drugi nacin da mi posaljes fajl .. pa cu ja to da ti sredim ..

takodje je bitno
- koja je verzija mysql-a sa kog je napravljen taj bekap
- koja je verzija mysql-a na koju ide restore

(ubi me glava nemam snage sad da pisem proceduru ... tako da .. baci mi taj bekap, ja cu popravim, pa cu kad se oporavim da se smorim da napravim eventualno post kod mene na blogu "kako da se izvuce iz tog sra*a")
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...12.03.2010. u 09:56 - pre 171 meseci
I mene muči enkoding, tj. prebacivanje sa MySQL servera verzije 3.23 na 5.0.51.
Baza na 3.x je u latin1 formatu, i kad je dampujem sa mojim klijentom iz shella sa

Code:
mysqldump --add-drop-table --default-character-set=latin1 --insert-ignore --skip-set-charset .... > baza.sql


dobijem fajl u kome se nalazi

Code (sql):

-- Server version       3.23.56-log
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `grejanje`
--

DROP TABLE IF EXISTS `grejanje`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `grejanje` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `naziv` VARCHAR(40) DEFAULT NULL,
  `knaziv` VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `grejanje`
--

LOCK TABLES `grejanje` WRITE;
/*!40000 ALTER TABLE `grejanje` DISABLE KEYS */;
INSERT  IGNORE INTO `grejanje` VALUES (1,'Centralno grejanje','CG'),(2,'TA peÄG','TA'),(3,'Etažno na struju'.....
 


i kad to pokušam sa istim klijentom da učitam na 5.0.x naravno, ne radi.
I ja sam nešto pogubljen sa tim enkodingom jer sam prije na ovaj način uspješno prebacivao iz latin1 u utf8. Doduše, ne između ovih verzija.

Probao sam i po ovom uputstvu ali ništa nije pomoglo.
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...12.03.2010. u 18:32 - pre 171 meseci
3.x ne zna sta je to karakter set !!!

ja sam krenuo da pisem neki skriptic za to al ukratko ...

1. uzmi taj tvoj dump file, takav u originalu, i napravi kopiju istog
2. onda promeni create table tako da svi text, char, varchar i ostali "txt" podaci budu BLOB !!
3. importuj sada taj dump u mysql 5.x
4. uradi sada za svako to polje koje si prebacio iz text u blob ili iz char(40) u blob ili ....
alter table t1 modify f1 char(40) character set utf8;
5. voila - sad sve radi

ono sto je bitno je da ubodes character set koji je "stvarno" u tabeli ... na primer mladi kolega 5h0ck je imao pola podataka u windows-cp1250 a pola u utf8 tako da je popravljanje negovog dump-a zahtevalo malo vise cimanja .. (fala bogu za awk i sed) + je imao kolone koje se zovu "order", "group", "date", "time", "timestamp" i slicno a naravno nisu bile backtikovane tako da sql naravno nije mogao da se izvrsi (opet - hvala bogu za sed)

dakle za tvoj slucaj ...

Code:

-- izbacis sva ova "sra*na na pocetku"

--
-- Table structure for table `grejanje`
--

DROP TABLE IF EXISTS `grejanje`;

-- izbacis obavezno ovaj ovde smor sa charsetom posto nije ispravan !!
CREATE TABLE `grejanje` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `naziv` BLOB,
  `knaziv` BLOB,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;


--
-- Dumping data for table `grejanje`
--

LOCK TABLES `grejanje` WRITE;
/*!40000 ALTER TABLE `grejanje` DISABLE KEYS */;
INSERT  IGNORE INTO `grejanje` VALUES (1,'Centralno grejanje','CG'),(2,'TA peÄG','TA'),(3,'Etažno na struju'.....
...


spucas to u bazu ... i onda odradis

Code:

alter table `grejanje` modify `naziv` varchar(40) character set utf8;
alter table `grejanje` modify `knaziv` varchar(40) character set utf8;


i sada proveris podatke u bazi - trebalo bi da su ok (za ovaj tvoj primer sa ovim podacima ce sigurno biti ok)
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Izgubljen u encodingu...23.03.2010. u 08:57 - pre 170 meseci
Niiice :)

Nisam znao za ovaj trik sa prebacivanjem u blob, mi kada smo migrirali na unicode sa latin1 smo ručno find-and-replace loše karaktere. (na sreću smo koristili samo latinicu)
"Common sense is not so common." - Voltaire
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...19.07.2010. u 10:44 - pre 166 meseci
@bogdan,
a sta da radim kad je ta kolona postavljena i kao neki KEY? I onda dobijam gresku

Code:
ERROR 1170 (42000) at line 20: 
BLOB/TEXT column 'kolonaaaa' used in key specification without a key length


Vidim na netu da predlazu da se ukloni taj KEY, ali ja to ne mogu da uradim. Postoji li neki drugi nacin?
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...19.07.2010. u 10:52 - pre 166 meseci
ti dok radis "Sredjivanje podataka u bazi" pristup toj bazi svejedno mora da se ukine tako da uklanjanje tog key-a ne treba da predstavlja problem. Ukines taj key, prebacis tamo vamo i kad podaci tu budu ok vratis key :D ... izgubices malo vremena za generisanje tog kljuca i to je sve
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...19.07.2010. u 11:27 - pre 166 meseci
Problem je sto se tu ne radi o jednoj bazi vec o par stotina :)
Pa mu ga to onda dodje kao mali skripterski pakao.

Nekako sam uspio da odradim citav find/replace svih char varchar text polja i onda ponovo ucitavanje, ali ovo me sad vratilo opet u kameno doba. + nove zajebancije se pojavljuju, kao npr. ta blob polja ne mogu da imaju default vrednosti pa i to mora da se budzi..
Ubicu se.
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...19.07.2010. u 11:37 - pre 166 meseci
default vrednost ti ne znaci nista posto polje svejedno vec ima neku vrednost a kao sto rekoh, dok radis tu promenu nema nikakvih inserta tako da te bas briga za default vrednost ..

ali da - pakao jeste - problem je kada se od starta lose radi i kada se smece u bazi nagomila, srediti to ume da bude "day in hell"
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...10.08.2010. u 16:05 - pre 165 meseci
Odradio sam monstrum skriptu koja je veliku vecinu posla uradila kako treba, ali mi je ipak ostalo par (ne moze da ne ostane) koje ne mogu da provalim sta ih muci i vozaju me vec dva dana.

Jednostavno, ne prikazuje mi nista iza č,ć... iz npr. te celije. Kao da ga tu nesto presijece.
A ne prijavljuje nikakvu gresku i "ostatak" podataka se i dalje nalazi u toj celiji.
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...10.08.2010. u 16:27 - pre 165 meseci
lose je formatiran string unutar polja .. najlakse ti je sledece ... prebacis ga u bin, napravis web skriptu koja ce taj bin da procita i pukne na html stranu bez ikakvog enkodinga i onda u browseru menjas enkoding (imas par desetina komada) dok ne nadjes tacno koji ce da ti prikaze txt kako treba ... onda prebacis u txt sa tim enkodingom, pa u utf8 ..
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...11.08.2010. u 09:11 - pre 165 meseci
Skapirao sam dio oko pronalazenja koji encoding je u pitanju i nasao sam ga (windows1250), ali zaista mi je mozak overloadovan i ne znam vise kako da to prebacim u utf8.

Dakle, kad na "novoj" bazi prebacim spornu kolonu u blob i povucem nesto sa jednostavnom skriptom skontam da je to win1250, ali sta sad dalje da uradim kako bi to prebacio u utf8? Jer kad vratim u text tu kolonu, ono opet ode sve kvragu.
Opet dump pa neke izmjene, pa ucitavanje opet.. ili moze nekako direktno u bazi??
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...11.08.2010. u 09:29 - pre 165 meseci
prebacis je u BLOB - ako sada na webu ovo vidis kao cp1250 ides dalje

pa iz BLOB prebacis u VARCHAR (ili char) sa CHARACTER SET cp1250
pa onda promenis character set u utf8 ..

dakle

Code:

alter table smece change djubre djubre blob;
alter table smece change djubre djubre varchar(100) character set cp1250;
alter table smece modify djubre djubre varchar(100) character set utf8;

 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...11.08.2010. u 09:51 - pre 165 meseci
Hm, probao sam tako, ali vrate se samo ž i š slova a čćđ se i dalje pojavljuju kao ?.
Inace, ovdje je konkretno u pitanju bila text kolona, ali mislim da to nema veze.


bogdane, kad ovo zavrsim castim te gajbom piva....
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...11.08.2010. u 09:55 - pre 165 meseci
A stani, prekrizi ovo gore, javljam se za par minuta... :)

Ne ovo za pivo, to ostaje nego ovo za ćč... :D
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...11.08.2010. u 11:05 - pre 165 meseci
ma pivo cemo lako nego ako ti ne uspe, odradi dump te tabele pa mi baci na bogdan.kecman [na] mysql.rs (pre toga bzipni)
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

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



+1365 Profil

icon Re: Izgubljen u encodingu...15.09.2010. u 09:17 - pre 164 meseci
Jos uvijek ovo razvlacim, ali polako i privodim kraju.

Imam opet cudnu situaciju. Kad prebacim na novi server/bazu polje je u blob formatu i u browseru se sve vidi ok kad je utf8 koristi u browseru. Kad prebacim to polje nazad u varchar bilo da mu navedem
alter table vesti change naslov naslov varchar(150) character set utf8 default NULL
ili
alter table vesti change naslov naslov varchar(150) default NULL
sve pobrljavi, odnosno pojave se upitnici?
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...15.09.2010. u 15:22 - pre 164 meseci
daj select HEX(blobpolje) from t1; pa onda iskonvertuj to u varchar sa utf8 pa opet uradi select HEX() pa da vidimo sta je uradio
 
Odgovor na temu

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

Strane: 1 2

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

Postavi temu Odgovori

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