Üdv!
Egy nagyon régi problémámhoz hasonló jött most elő, és sajnos ehhez egyáltalán nem értek.
Adott egy python + django applikáció, ami mögött egy mysql szerver található. Az adatbázisban semmilyen kódolás nem lett beállítva, default szinte teljesen.
Az őűŐŰ karakterek helyett mindenhol kérdőjelek jelennek meg, és ezt szeretném orvosolni.
Nagyjából 4- 5 tábláról van szó, de ha az adatbázis egészére meg lehet oldani, az még jobb.
Amit eddig próbáltam:
ALTER TABLE tablanev CONVERT TO CHARACTER SET utf8 COLLATE utf8_hungarian_ci
. Ez megoldja a problémát az újonnan felvitt rekordokhoz, de a régiek helyén kérdőjelek maradnak. Ha ráfrissitek a rekordra, szintén kérdőjelek maradnak. Igazából nem tudom, hogy ezek milyen típusú kérdőjelek (mármint tényleg kérdőjelek (#63), avagy még megvan az eredeti karakter (őúŐÚ, stb), csak rosszul jelennek meg).
select mezo from table
hatasara is kerdojelnek tunnek.
-----
Debian: 8.9
Mysql: 5.5.57
Python: 2.7.9
Django: 1.11.4
mysql> show session variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
Koszonom a valaszokat, hozzaszolasokat.
- 1475 megtekintés
Hozzászólások
Tábla karakterkódolás mellett az egyes (text/string)mezők és az adatbázis karakterkódolása is utf8_* ?
- A hozzászóláshoz be kell jelentkezni
Hogyan tudom megnézni?
- A hozzászóláshoz be kell jelentkezni
Esetleg tudsz listázni karakterkódokat:
mysql> select type from ports where id=13315;
+------+
| type |
+------+
| USB |
+------+
1 row in set (0.00 sec)
mysql> select hex(type) from ports where id=13315;
+-----------+
| hex(type) |
+-----------+
| 555342 |
+-----------+
1 row in set (0.00 sec)
- A hozzászóláshoz be kell jelentkezni
Akkor most tudom, hogy elvesztek, tul sok 0X3F van benne :- ).
- A hozzászóláshoz be kell jelentkezni
Csinálnék egy dumpot, abban megnézném hogy milyenek a karakterek.
Ha nem jók akkor lehet sed-el a replace-t megcsinálni.
Van persze olyan szitu amikor sajnos újra be kell vinni az adatokat mert ha nem bírta tárolni akkor nem bírta tárolni...
Aztán a dumpot egy helyesen (kódolással) megcsinált adatbázisba vissza lehet rakni, tesztelni, kész.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Igen, dump- on en is gondolkoztam, hogy azt iconv- vel atkonvertalni, de a jelek szerint ott is rossz. A dump elejen amugy ez van:
ENGINE=InnoDB AUTO_INCREMENT=662 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
.
- A hozzászóláshoz be kell jelentkezni
MySQL-nél ne használt utf8-at, mert az nem rendes UTF-8 kódolás, hanem valami más, ami hasonlít az UTF-8-ra, de nem az.
Használj utf8mb4-et, az jobb, de az sem az igazi UTF-8.
https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
- A hozzászóláshoz be kell jelentkezni
Magyar ékezetekről van szó gondolom, nem kell túlspirázni.
Beállít, kipróbál, go.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Ha user által felvitt tartalom (azaz nem a rendszer által kontrollált adat), akkor nem feltétlenül van benne csak magyar ékezet.
Az ilyen könnyelmű hozzáállások, miszerint "beállít, kipróbál, go", ahelyett, hogy átgondolná, és rendesen csinálná az ember (ami ugyanannyi beállítás, csak előtte van egy 10 perces "átgondol" fázis is) vezetnek oda, hogy igénytelenek a szoftverek, és az üzemeltetési környezetek.
- A hozzászóláshoz be kell jelentkezni
mondjuk ilyen szempontból a MySQL egy förtelmes szoftver, mert az átgondolnál az ilyen apróságait elég alaposan kell ismerni.
Múltkor egy napot olvastam utána, hogyan kezelünk rendesen UTF-8-at MySQL alatt - és sikerült szmájlikat beszúrnom, meg ilyenek, de még mindig nem vagyok benne biztos, hogy minden korrekt...
- A hozzászóláshoz be kell jelentkezni
Persze, hogy förtelmes, de azért ha már nekiül az ember és használja, akkor olvassa el a hozzá tartozó dokumentációt.
- A hozzászóláshoz be kell jelentkezni
Bocs, de ha mar hozzanyul, akkor miert ne csinalna meg rendesen? (Valamint az is erdekes feltetelezes, hogy orokke csak magyar nevu ugyfelek lesznek.)
Kb pont az ilyenekbol lesznek a kodban a provizorikus kodreszletek, meg kesobb a techdebt sprintek.
Nyilvan nem lehet mindenhol a tokeletessegre torekedni (nincs ra ido, nem eri meg, etc), de itt most szo szerint harom plusz betuvel meg lehet elozni kesobbi gondokat...
- A hozzászóláshoz be kell jelentkezni
Lehet, de amikor ez az adatbazis fel lett huzva, kizarolag angol kornyezetrol volt szo. Senki nem is tudott mas nyelven... .
- A hozzászóláshoz be kell jelentkezni
Angol környezetben (még ha az emberek nem tudnak angolul), akkor is szükség lehet tárolni olyan szavakat például, hogy "Hódmezővásárhely" vagy "Jászfelsőszentgyörgy", ami lehet egy copy-paste eredménye.
- A hozzászóláshoz be kell jelentkezni
Nem az eredeti felallasra gondoltam, hanem a mostani helyzetre.
Ugy ertettem, hogy ha mar kiadod a parancsot es konvertalod az egeszet, akkor nem biztos, hogy X formatum a tuti hosszabbtavon, hanem pl X{megharomkarakter}.
- A hozzászóláshoz be kell jelentkezni