MySQL adatbázis visszatöltése után nem jók a karakterek

Sziasztok!

Adott egy szerver UTF8-as fájlrendszerrel.
Mysql 5.1.49

Az adatbázisokról mentés készül ilyen formában cron segítségével:
mysqldump -pxxxxxx -u felhasznalo adatbazis > /backup_utvonal/mysql_databases/datum-adatbazis.sql

Így létre jön egy fájl, amit ha a következőképpen visszatöltök:
mysql -u felhasznalo -p IDE_TOLTOM_VISSZA < datum-adatbazis.sql

akkor az ékezetes karakterek nem lesznek jók.
Mit hibázok?

A script fájl utf8, a létrejött backup file utf8, az adatbázis utf8, a táblák utf8-ban vannak és a mező is utf8 amiben rosszak az ékezetek.
Ha belenézek a fájlba, akkor ott tök jól vannak az ékezetek.

Ha a script elejébe beírom, hogy "SET NAMES 'utf8';" nem számít neki. Ugyanúgy rossz.

Tudna segíteni valaki?

Üdv: redman

Hozzászólások

Tudom nem segít, de hasonlót szopok latin2-vel. Hiába töltöm akárhogy, nekem meg utf8 lesz belőle :)

Ha a

locale charmap

parancs nem UTF-8-at ad vissza, akkor a locale beállításokat kéne megnézni (dpkg-reconfigure locales debian esetén).

Remélem nem írtam hülyeséget :D

Esetleg így?
mysqldump -u username -p --default-character-set=utf8 database > backup.sql
mysql -u username -p --default-character-set=utf8 database < backup.sql

Szia!

A mysqldumpnak van olyan kapcsoloja hogy mindenkeppen dumpolja ki create table statementekbe a charset infokat is. Ezt a kapcsolot javaslom megadni a cron scriptedben, es akkor ezzel tobbet nem lehet problemad fuggetlenul attol hogy hogy allitod visza.

A phpmyadmin -ban azért "jó" a dump mert a phpmyadmin ide-oda konvertálgat. A bibi ott lehet, hogy a db-t ugyan utf-8 charset -el csináltad, de a mysql nem utf-8 kódolással fut.

mysql> SHOW VARIABLES LIKE '%CHAR%';

Ergo "nem fér bele" az utf-8 az adatmezőkbe, ezért konvertál a mysql. Mikor dumpolsz akkor jön szembe a gebasz és megy el a karakter kódolás. Na most ezzel sokmindent nem tudsz csinálni. A táblákat egyenként dumpolva és iconv -al átkonvertálva, majd egy utf-8 -as db -be betöltve helyre lehet hozni. A dumphoz esetleg használhatod az én mysqldump scriptemet ez táblánként csinál egy egy filet az adattartalomnak, adatbázisonként csinál create scriptet és a dump db-nként külön mappákba kerül.

----
올드보이
http://molnaristvan.eu/

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Igazad van itt lehet a baj.
Köszi a scriptet, hasznosítani fogom.

http://www.redman.hu

ilyennel char encoding dologgal én is szívtam sokat.
legtöbbször megbruteforcoltam, kombinálva a mysqldump --default-charset= és a mysql import lehetséges charset-jeit, olykor közé pipe-olve egy-két iconv-ot.
átlagosan 6-odjára mindig jó lett.

gyakoran találkoztam a "dupla" utf8-as kódolással, amit így orvosoltam:

fromcharset=latin2
tocharset=utf8
dbname=${1}
dumpfile="/tmp/sql_dump-$dbname-`date +%Y%m%d-%H%M`.sql"

mysqldump -v -h ... -u ... -p... --opt --quote-names --skip-set-charset --default-character-set=$fromcharset "$dbname" > "$dumpfile"

cat "$dumpfile" | replace ${fromcharset}_hungarian_ci ${tocharset}_unicode_ci $fromcharset $tocharset | mysql -h ... -u ... -p... "$dbname"

vagy ha nincs replace parancs: sed -e "s/${fromcharset}_hungarian_ci/${tocharset}_unicode_ci/g" | sed -e "s/$fromcharset/$tocharset/g"

Két lépésben csináltam, mert ugyanoda importáltam vissza (és nem bíztam az sql LOCK-ban), de izlés szerint egybe is pájpolhatod :)

~~~~~~~~
http://www.youtube.com/watch?v=VbUVqODL1nE