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
- 6873 megtekintés
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 :)
- A hozzászóláshoz be kell jelentkezni
Cseréljetek adatbázist :)
- A hozzászóláshoz be kell jelentkezni
Na szép! :)
Ha a fájlt letöltöm és phpmyadmin-ban SQL-ként lefuttatom, akkor tökéletes.
- A hozzászóláshoz be kell jelentkezni
Ez van, nehéz nyelv a magyar.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
+1
szerintem is a locale beállítás lesz a gond. Nálam is volt annó hasonló körülmények miatt szívás belölle.
- A hozzászóláshoz be kell jelentkezni
Ez is UTF-8
- A hozzászóláshoz be kell jelentkezni
mellé
- A hozzászóláshoz be kell jelentkezni
Esetleg így?
mysqldump -u username -p --default-character-set=utf8 database > backup.sql
mysql -u username -p --default-character-set=utf8 database < backup.sql
- A hozzászóláshoz be kell jelentkezni
Megcsináltam, így jó.
Aztán kiderült, ha kézzel csinálom, akkor plusz kapcsoló sem kell és jó.
Hmm érdekes. A cron miatt lenne?
Elnézést, téves volt a tesztelés. Nem jó :S
- A hozzászóláshoz be kell jelentkezni
Tuti a db a rossz? Nem a konzol beállítása a bibis ahol nézed? Vagy a phpmyadmin vagy valami? Nem kötekedésképp, de mást nem tudok elképzelni.
- A hozzászóláshoz be kell jelentkezni
Este megnézem máshonnan is, de most is utf8-as debian alatt vagyok.
Az esti teszt windows alatt lesz puttyal
- A hozzászóláshoz be kell jelentkezni
a dump elejére, miután meggyőződtél róla, hogy a file maga tuti hogy UTF-8 és abban a karakterek jók.
SET NAMES UTF8
illetve ellenőrizd, hogy a táblában lévő oszlopok szintén UTF-8 valamelyik variánsa
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
+1
--
A legértékesebb idő a pillanat amelyben élsz.
http://phoenix-art.hanzo.hu/
https://sites.google.com/site/jupiter2005ster/
- A hozzászóláshoz be kell jelentkezni
SET character_set = utf8
?
- A hozzászóláshoz be kell jelentkezni
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/
- A hozzászóláshoz be kell jelentkezni
+--------------------------+----------------------------+
| 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.
- A hozzászóláshoz be kell jelentkezni
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 :)
- A hozzászóláshoz be kell jelentkezni