Portál AbcLinuxu, 10. května 2025 12:26
Ahoj,
už jsem převáděl (je to trošku dýl) a největší problém byl s konverzí. Nejlepší je udělat dump, upgradovat, upravit hlavičku dump souboru na správné kódování a pak importovat.
Občas jsem narazil na db s MySql 4.1, kde byly data uložený v Latin2, ale db si myslela, že jsou v Latin1. Důsledkem bylo to, že při čtení z db ve formě Latin1 bylo možné následně zobrazit vše na stránkách správně v Latin2, ale nefungovalo správně řazení atp. Pokud bys narazil na tenhle problém, tak napiš, udělal jsem si na to malý php skript na opravu
Jo a je nezbytné správně nastavit kódování v jakém chceš data získávat a v jakém ukládat.
Libor
#recode -l <- vypíše všechna kódování co umí... #recode latin1..UTF-8 < soubor.vstup > soubor.vystupJura
mysqldump --default-character-set=latin1 .... > dump.sql
a následně: mysql --default-character-set=latin1 < dump.sql
mysql --default-character-set=latin1
nemělo fungovat.
ENGINE=MyISAM DEFAULT CHARSET=latin1;
. A to kódování u tabulky má větší váhu než nastavení pro server nebo databázi.
Takže pokud ty data mají být uložena v utf8 (zdůrazňuji uložena, protože je klidně můžu mít uložena v latin2 a výsledky mi to může vyhazovat v utf8 - je třeba rozlišovat mezi kódováním pro vzájemnou komunikaci mezi klientem a serverem a mezi kódováním, v kterém jsou data uložena na serveru), tak je třeba vykopat to latin1, narvat tam utf8, a překódovat ty data. Doporučuju snad něco takového (bez záruky
mysqldump --default-character-set=latin1 databaze > dump.sql
sed -e 's/=latin1/=utf8/' dump.sql > dump2.sql
iconv -f(původní "implicitní" kódování dat v mysql - pro češtinu asi latin2) -tutf8 dump2.sql > utf8.dump.sql
mysql --default-character-set=utf8 databaze < utf8.dump.sql
Huh, snad je to dobře :)
sed -e "s/SET NAMES latin1/SET NAMES utf8/" dump2.sql
. Já to teda zkoušel na mysql 5.0 ...
CREATE TABLE `access` ( `aid` tinyint(10) NOT NULL auto_increment, `mask` varchar(255) NOT NULL default '', `type` varchar(255) NOT NULL default '', `status` tinyint(2) NOT NULL default '0', PRIMARY KEY (`aid`) ) TYPE=MyISAM;
echo "show variables like '%character%'" | mysql
?
echo "show variables like '%character%'" | mysql Variable_name Value character_set latin1 character_sets latin1 big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin1_de latin2 latin5 sjis swe7 tis620 ujis usa7 win1250 win1251ukr win1251 convert_character_set
create database x character set utf8
, což si IMHO nedělal) a nebo pro server, což jsem chtěl zjistit pomocí toho show variable
. Pro server se to dá nastavit v my.cnf .
[mysqld] character-set-server = utf8
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.