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 13: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 16: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 17: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 18:02

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

Odeslat příspěvekod Zbynas 13. 7. 2021 08: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 08: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 21: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 08: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 14: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ý


Kdo je online

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