Neseniai rašiau apie problemą kai perėjus prie MySQL5 atsirado problema su UTF-8 duomenis. Taigi google užklausos nepadėjo nie kiek, tad teko pagalvoti logiškai, ir sprendimą radau.
Situacija
Duomenų bazės, lentelių, stulpelių collation yra cp1257
Duomenys išsaugoti UTF-8 formatu.
Duomenims įterpti dar nenaudojams SET NAMES, SET CHARSET
Užduotis
Sutvarkyti taip, kad būtų teisingi collcate.
Sprendimas
PHPMyAdmin ar kitos toolsas kuris pritaikytas mysql 4.1 ar mysql 5 tikrai netinga. Nes juose jau naudojamas set names, set charset ko pasekoje duomenis tampa sugadinti. Ką gi vadinasi reikia tools’o kuris nenaudotu exportuojant jų. Išvada darom backup’ą be setnames. Paieškojęs phpclasses susiradau elemantarią klasikę padarančią duomenų bazės backupą, kaip ir tikėjausi ji nenaudoja specifinių SET NAMES, SET CHARSET. Kadangi kaikurių lentelių dydis gan didelis ir PHP pradeda keiktis kai per daug duomenų patenka į RAM, teko ją optimizuoti eksportuoti po vieną lentelę.
Paleidus skriptą ji eksportuoja duomenis teisingai. Tereikia paredaguoti struktūra nurodant teisingą collation (Šiuo atveju pakeičiant cp1257 į UTF8) pvz
pakeičiant į
žinoma ir rekomenduotina pačios lentelės collation pakeiti jau į teisingą.