Jak překódovat DB?

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Zbynas 12. 7. 2021 12:30

Zdravím,

jak veškerá data v DB, (má fakt hodně tabulek) najednou překódovat na UTF-8? Současně je vše uložené v ANSII, i když porovnávání je nastavené všude na utf8_general_ci.

Řešení poté už jsem našel, jen přidám mysqli_set_charset($pripojeni,"UTF8"); za připojení k db. Ale jak vše, co tam teď je, najednou překódovat?

Díky ...

UPDATE
tak to asi není v ANSII. Ale vypadá to podobně:
Správně je: Český olympijský výbor
V PhpMyAdmin se zobrazuje:
Kód: Vybrat vše
ÄOeskA1 olympijskA1 vA1bor

Český olympijský výbor při použití utf8_encode vypadá trošku jinak:
Kód: Vybrat vše
Český olympijský výbor


Tak co to je nevím. Pak už si snad nějak poradím ...
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 12. 7. 2021 15:46

Tak 1. bych doporučil mít MySQL nastaveno na utf8mb4_general_ci než starší verzi.
2. zkus si pohrát s https://www.php.net/manual/en/function. ... coding.php
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Zbynas 12. 7. 2021 16:29

Tak, problém s půlky solved, zjistil jsem, že je to v kódování windows-1252.

Vymyslel jsem, že to přes PHP načtu export celé databáze a uložím do souboru s opraveným kódováním takto:

Kód: Vybrat vše

  $myfile = fopen("admin_klienti2.txt", "r") or die("Unable to open file!");
$file = fread($myfile,filesize("admin_klienti2.txt"));
fclose($myfile);
$file2 = mb_convert_encoding($file,"Windows-1252","UTF-8");

         
           echo $file2;

$myfile2 = fopen("admin_klienti3.xml", "w") or die("Unable to open file!");
$txt = $file2;
fwrite($myfile2, pack("CCC",0xef,0xbb,0xbf));
fwrite($myfile2, $txt);
fclose($myfile2);


Když to vypíšu na stránce pomocí echa, tak v pohodě.

Ale v tom souboru je to zase s tím starým kódováním! Jak to? :(
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 12. 7. 2021 17:02

Proc nepouzijes nejaky standardni nastroj na konverzi, treba "iconv" ?
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Zbynas 13. 7. 2021 07:01

Iconv mi nekonvertuje všechno, bůhví proč. Např. písmeno "č" ...

Hlavně je to snad jedno ne? Já řeším, proč se do souboru neuloží překonvertované v UTF, ale zase ve Windows-1252 ... .
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 13. 7. 2021 07:28

"Iconv mi nekonvertuje všechno, bůhví proč. Např. písmeno "č" ..." - to je problem, kdyz mas spatne kodovani - asi to neni presne v tom kodovani, ktere predpokladas.

"Hlavně je to snad jedno ne? Já řeším, proč se do souboru neuloží překonvertované v UTF, ale zase ve Windows-1252 ... ."

PHP se stranim jako cert krize, ale pokud otevres textovy soubor bez explicitniho uvedeni kodovani, tak se asi ulozi v kodovani, ktere je pro system defaultni (jen hadam, PHP jsem naposledy zkusil pouzit v 90. letech a rychle dal ruce pryc).

Takze hledej v napovede k fopen() a dokumentaci PHP. Otevreni souboru pro zapis v defaultnim rezimu a pokus o zapsani BOF hlavicky pomoci hexa kodu asi nebude ten spravny zpusob. I kdyz ve svete PHP tezko rict...
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Just_jo 14. 7. 2021 20:03

Je opravdu těžké si to najít sám? Co třeba Google a správný tvar dotazu např. "php save file utf8" případně dodat stackoverflow

https://stackoverflow.com/questions/483 ... f-8-format
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Zbynas 27. 7. 2021 07:21

Zkoušel jsem už miliardy možností, bez výsledku. Tak jsem to vymyslel tak, že v DB vytvořím duplicitní tabulky, ale s novým kodováním (utf8mb4).

Pak udělám skript, který to naháže ze starých tabulek do nových. (SELECT, INSERT ...)

Kód: Vybrat vše
iconv('UTF-8' , 'Windows-1252//TRANSLIT',$str)


Jenže to má za následek to, že to zkonvertuje tak, že písmena s diakritikou převede na písmena bez diakritiky. Proč? (Pokud za to nedám TRANSLIT, vrátí to prázdný řetězěc)
¨
mb_convert_encoding jsem též zkoušel, ale to mi místo diakritiky udělá otazníky. Původním kódováním jsem si jist ...

-- 27. 7. 2021 08:28 --

Just_jo píše:Je opravdu těžké si to najít sám? Co třeba Google a správný tvar dotazu např. "php save file utf8" případně dodat stackoverflow

https://stackoverflow.com/questions/483 ... f-8-format

Přesně to jsem také našel, ale bez výsledku. Buď místo diakritiky zůstaly otazníky, nebo nic.
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod JirkaVejrazka 27. 7. 2021 13:49

Budes muset zjistit, v jakem kodovani to ted mas. ANSII to urcite neni (takove kodovani neexistuje).

Napis, jak presne mas ted nastavenou databazi (vse, co se tyka kodovani) a jak je nastavene kodovani na OS serveru a klientech.

Tvuj problem je zrejme hlavne v tom, ze vubec netusis, jake je kodovani ve zdrojovych datech.
JirkaVejrazka
Mírně pokročilý

Odeslat příspěvekod Zbynas 20. 8. 2021 08:45

Je to zakódované ve Windows-1252. Ovšem v db, ve které je to uložené, je nastaveno kódování utf8_general_ci.

Pokud to chci pomocí SELECT a INSERT překopírovat do nové DB, s nastaveným kódování UTF8 64, mezi selectem a insertem to překóduju, ať už pomocí iconv nebo mb_convert_encoding, děje se to, co jsem popsal výše. Na webu, když to během kopírování zobrazím, v html s nastaveným UTF8, tak se to zobrazí správně. Do DB se to ale vloží špatně.
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 22. 8. 2021 10:54

Dodám k tomu jediné - snaž se :-) Data máš jen ty.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Zbynas 27. 8. 2021 14:14

Tak jsem to vyřešil, vybral jsem z DB, překódoval a vložil do nové tabulky. Jenže jedna tabulka mě zabrala dvě hodiny, protože má moc sloupečků. To už jsem sic předtím zkoušel, ale zapomněl jsem tam dát SET NAMES, proto to dělalo bordel.

A takhle dalších 20 tabulek .. :-\

Díky všem za pomoc, tedy VYŘEŠENO.
NVidia GTX 1060 6GB, Intel Core i7-2600K @ 3,4 GHz, 16 GB DDR 3
Download 100 Mbps, Upload 100 Mbps, ping 8
VINOTÉKA U FREJKA
FREJK.CZ, FREJK.SK, FREJK.COM
Zbynas
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků