Sziasztok,
Nem biztos hogy a legjobb helyen nyiitottan ezt a témát ezért elnézést kérek.
Van mysqldump-om UTF8 kodolással ezt én iso-8859-2-re szeretném kodolni iconv-vel probáltam de a (őű-ŐŰ)-t egyszerüen kihagyta a játékból.
iconv -f UTF8 -t ISO88592 -o konvert.sql dump.sql parancsal probáltam.
Van-e valakinek ötlete hogy kellen konvertálni?
Köszi
P.Zoli
- 8457 megtekintés
Hozzászólások
miert lenne amugy neked erre szukseged? 4-es mysqltol felfele mar van korrekt charset es collation kezeles, automatikus konverziokkal. pl. utf8-ban van minden adatod a tablakban, de lekerdezeskor te latin2-ben kapod vissza, ha ugy kered.
- A hozzászóláshoz be kell jelentkezni
Szia
gondolom ezt kellene beállítani az adott DB-re "convert character set"
megtudnád mondani ezt hol lehet beállítani?
P.Zoli
- A hozzászóláshoz be kell jelentkezni
ajanlott olvasmany: http://weblabor.hu/cikkek/mysql50karakterkodolasok
- A hozzászóláshoz be kell jelentkezni
Erre pont azért van szükség, mert 4-es mzsqltől felfele nincs korrekt charset és collution kezelés. Amióta berakták, rengeteget szívás van vele, főleg azért, mert:
1) alapból swedish-re rakja, nemtom mi a f*ért. Az sem segít, ha átállítom, minden mezőnek külön meg kell adni create table-nél, hogy collate utf8 ha biztos akarsz lenni
2) a mysqldump képtelen kezelni a kódlapokat, nekem pl akkor adja vissza jól az utf8-at, ha latin1-ben kérem le...
3) connect után ki kell adni a set names utf8 és set charset utf8 sql parancsokat, ha jót akarsz.
Egyébként meg ez az egész egy baromság szvsz, ha egy adatbázisba berakok egy értéket adott kulcsra, akkor a kulcsot lekérve bitre ugyanazt az adatot akarom, amit beraktam, nem másikat. Ez az egész kódlap mizéria egyáltalán nem tartozik az adatbázisrétegre, az a megjelenítési réteg dolga lenne...
- A hozzászóláshoz be kell jelentkezni
Hibás beállítás a szerveren vagy az adatbázison?
Először is az adatbázisnak kell beállítani a collation-t, utána a tábláknak már automatikusan azt adja, az új mezőknek pedig a tábla collation-jét használja. Nem ismerek olyan beállítást, ami ezt a működést felülírná.
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy ezereves topic, de azert "segitek".
"Egyébként meg ez az egész egy baromság szvsz, ha egy adatbázisba berakok egy értéket adott kulcsra, akkor a kulcsot lekérve bitre ugyanazt az adatot akarom, amit beraktam, nem másikat."
Semmi problema, allitsd a kulcson kivul az osszes mezot blob (vagy binary vagy mittomen) tipusura es ezt a funkcionalitast kapod.
"Ez az egész kódlap mizéria egyáltalán nem tartozik az adatbázisrétegre, az a megjelenítési réteg dolga lenne..."
Azert tartozik a DB retegre, mert valaki ugy dontott, hogy az SQL szabvanyban legyen "order by", ami abc rendet is tud. Ehhez ismernie kell a binaris adatot betukke konvertalo kodlapokat. (Az mar csak nyalanksag, hogy az abc nyelvenkent valtozo (abcd vs aábccsd), lasd collation.)
- A hozzászóláshoz be kell jelentkezni
Szerintem hagyd a konvertalast es csinalj masik dumpot.
Ehez peddig hasznald a "--set-charset" opciot !
En is szivtam mar ezzel, es ez megoldotta !
- A hozzászóláshoz be kell jelentkezni
Ha nem lehet másik dump-ot csinálni, akkor javaslom a gedit/kate/ConTEXT programok valamelyikét (gnome/kde/winjajj). Az első kettőnél biztosan meg lehet adni megnyitáskor és mentéskor a karakterkészletet...
A ConTEXT-ben meg (ha Winbe vagy szorítva) van lehetőség a konvertálásra.
- A hozzászóláshoz be kell jelentkezni
Én nagyon bunkó módon, de az OpenOffice-t használom a legtöbbször ilyen célra...
Bár van valahol egy perl scriptem is, ami Unicode-ból CP1250/51/52/53/54/57-be konvertál, és az alapértelmezettől eltérőket tag-eli (Quark és Ventura szövegfájlokat gyártottam vele anno)
Baromi primitív módon felvettem a táblákat a 128-as kódtól, és a kódlaphasználati sorrendnek megfelelően feltöltöttem vele egy 64k elemű tömböt, ahol minden elem tartalmazza a megfelelő karaktert, és ha szükséges, akkor a közrefogó tag-et is. Utána egy regex egyszerűen megoldja a problémát:
s/[^\x00-\x7F]/$replace[ord($&)]/eg
Azért primitív, mert pl. azok a karakterek, amelyek egyik kódlapon sem szerepelnek, eltűnnek.
- A hozzászóláshoz be kell jelentkezni
recode?
- A hozzászóláshoz be kell jelentkezni
recode utf8..latin2
- A hozzászóláshoz be kell jelentkezni
> iconv-vel probáltam de a (őű-ŐŰ)-t egyszerüen kihagyta a játékból.
> iconv -f UTF8 -t ISO88592 [...]
Fogadni mernék hogy azért hagyja ki mert nem ilyen betűk szerepelnek utf8-ban, hanem hullámos-kalapos változatok. Próbáld meg iso8859-1-re konvertálni, ha ekkor jók lesznek az ékezetek, akkor én nyertem. Ebben az esetben (ha magyar szöveget tárolsz utf8-ban) nagyon-nagyon el van rontva valami, mert valójában nem is utf8-ban tárolod, hanem egy abszolút nem szabványos egyéni kódolásban.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Ha még egy kicsit vártál volna, akkor meg lett volna az 5 éves évfordulója az így felhozott halott topiknak. :-D
- A hozzászóláshoz be kell jelentkezni
Ha az a gáz hogy a visszaállításkor egy csomó kriXkraX lesz az ékezetek helyén, akkor, jobb ha tudod, az iconv nem tud rajtad segíteni:
utf8_max_len = 3
latin2_max_len = 1
tehát az utf-8 as karakter hárpm bájtot használ amig a latin2 csak egy bájtot.
Inkább illesztd be a dumb első soraiba:
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=latin2;
A MySQL elvégzi a megfelelő konverziót (a módszer ki van próbálva megy), de hagy szabadjon megjegyeznem, hogy az utf-8 kódolással szélesebb körű kompatibilitáshoz jutsz (még ha kanjit nem is akarsz használni).
- A hozzászóláshoz be kell jelentkezni
na en is megszoptam ezzel es tenyleg mukodik. koszi.
- A hozzászóláshoz be kell jelentkezni
Köszönet. Ez hasznos volt.
- A hozzászóláshoz be kell jelentkezni
Nem tudom, hogy a parancssoros iconv-al is működik-e, de Ruby-val így lehet csinálni:
ic = Iconv.new('ISO-8859-2//IGNORE//TRANSLIT', 'UTF-8')
ic.iconv(str)
//IGNORE és //TRANSLIT kapcsolók sorrendje számít, de neked szerintem csak a translit kell. Lehet, hogy az ő-kből o betüt csinál
- A hozzászóláshoz be kell jelentkezni