Topic: Duomenų bazės koduotės
Sveiki,
duomenų bazėj duomenys yra Windows-1257 koduotės. Noriu duomenis pervest į UTF-8. įmanoma tai padaryti?
PHP ir MySQL programavimas, SQL užklausos, duomenų bazės, PHP scriptai, pagalba, diskusijos, pamokos ir straipsniai.
You are not logged in. Please login or register.
PHP ir MySQL → SQL užklausos ir duomenų struktūros → Duomenų bazės koduotės
Sveiki,
duomenų bazėj duomenys yra Windows-1257 koduotės. Noriu duomenis pervest į UTF-8. įmanoma tai padaryti?
įmanoma :)
O kaip tą daryti priklauso dar ir nuo duomenų bazės versijos.
Serverio versija: 5.0.45-community-log
Tą turėjai omeny? :)
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.
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į?
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.
dėkui labai :)
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');
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.
PHP ir MySQL → SQL užklausos ir duomenų struktūros → Duomenų bazės koduotės
Powered by PunBB, supported by Informer Technologies, Inc.