Topic: Duomenų bazės koduotės

Sveiki,

duomenų bazėj duomenys yra Windows-1257 koduotės. Noriu duomenis pervest į UTF-8. įmanoma tai padaryti?

Re: Duomenų bazės koduotės

įmanoma :)

O kaip tą daryti priklauso dar ir nuo duomenų bazės versijos.

Re: Duomenų bazės koduotės

Serverio versija: 5.0.45-community-log

Tą turėjai omeny? :)

Re: Duomenų bazės koduotės

Taip.

Prieš bandant atlikti konversiją rekomenduoju pasidaryti duomenų bazės/lentelės backup'ą, tam atvejui, jeigu nepavyks gauti norimo rezultato.

O paskui bandyti atlikti tokias užklausas:

a) jeigu nori pakeisti konkrečios lentelės "lentele" koduotę pagal nutylėjima, ir visų jos stulpelių, kurių tipai yra CHAR, VARCHAR ir TEXT, koduotę:

ALTER TABLE `lentele` CONVERT TO CHARACTER SET utf8;

b) jeigu nori pakeisti konkrečios lentelės, konkretaus stulpelio koduotę:

ALTER TABLE `lentele` CHANGE `stulpelis` `stulpelis` TEXT CHARACTER SET utf8;

Antru atveju reikia turėti omenyje, kad pavyzdys patektas, kai stulpelio tipas yra TEXT ir nekeičiamas to stulpelio pavadinimas (du kartus paminetas tas pats stulpelio vardas).

Taip pat, po pakeitimo, norint matyti rezultatą, reikia nepamiršti, kad dirbant reikia naudoti UTF8 koduotę tiek jungiantis prie duomenų bazės tiek nurodant puslapio koduotę HTML antraštėse.

Re: Duomenų bazės koduotės

Pabandysiu. O iškart dar paklaust noriu. DB sudaro daug lentelių. Neina iškart ją konvertuot, ar pasirašyti skriptą, kuris surenka lenteles ir vykdo tą sakinį?

Re: Duomenų bazės koduotės

Galima parašyti ir script'ą. Iš užklausos "SHOW TABLES" rezultatų pasiimti visas lenteles, ir jom cikle vykdyti aukščiau minėtas konvertavimo užklausas.

Re: Duomenų bazės koduotės

dėkui labai :)

Re: Duomenų bazės koduotės

Principe veikia, o kaip senus duomenis paverst į UTF-8? Nes jų nepaveikia

Prisijungus naudoju mysql_query('SET NAMES utf8'); mysql_query('SET CHARACTER SET utf8');

Re: Duomenų bazės koduotės

Jeiug po konvertavimo į utf8 seni duomenys rodomi neteisingai vadinasi jie buvo neteisingai saugomi (pvz latin1 koduotės lentelėje buvo saugomi cp1257 duomenys). Tokiu atveju sistema automatiškai negalėjo konvertuoti duomenų iš vienos koduotės į kitą ir juos galima tvarkyti tik rankiniu būdu. čia kaip pvz. paėmiau latin1, nes dažnai tai yra default koduotė, kurioje dauguma pradedančiųjų vartotojų ir saugo visus duomenis, nors tie duomenys yra visai kitos koduotės. Turint rokią situaciją yra du keliai:
a) jeigu duomenų yra labai mažai - juos paredaguoti rankomis;
b) jeigu duomenų tiek, kad rankomis redaguoti neapsimoka - tada reikia rašyti script'ą, kuris tvarko senus duomenis arba arba naudoti pusiau-automatinius metodus pasitelkiant db-eksportavimą/teksto redaktorių replace funkcijas/db-importavimą.

Tokio jau esamo įrankio aš bent jau nežinau. Reikia pabandyt paieškot.