Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Wangarad 07. 12. 2020, 12:47:34

Název: PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Wangarad 07. 12. 2020, 12:47:34
Zdravim.
Doteraz som nemal problem s pouzivanim tohoto
Kód: [Vybrat]
$info = array('Database'=>$db,'UID'=>$user,'PWD'=>$pass, 'CharacterSet'=>'UTF-8','ReturnDatesAsStrings'=>true);
// Connect to the database
        $connector = sqlsrv_connect($host, $info);
avsak pri jednej aplikacii mi to vrazia mena uzivatelov v tvare
Kód: [Vybrat]
Žilíková a podobne. Co s tym? Pozeral som po googly ale nenasiel som nic co by mi pomoholo.
Databaza je nastavena Slovak_CI_AS tak ako vsetky
Název: Re:PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Pavel Stěhule 07. 12. 2020, 14:25:23
Zdravim.
Doteraz som nemal problem s pouzivanim tohoto
Kód: [Vybrat]
$info = array('Database'=>$db,'UID'=>$user,'PWD'=>$pass, 'CharacterSet'=>'UTF-8','ReturnDatesAsStrings'=>true);
// Connect to the database
        $connector = sqlsrv_connect($host, $info);
avsak pri jednej aplikacii mi to vrazia mena uzivatelov v tvare
Kód: [Vybrat]
Žilíková a podobne. Co s tym? Pozeral som po googly ale nenasiel som nic co by mi pomoholo.
Databaza je nastavena Slovak_CI_AS tak ako vsetky

Je otázkou jestli data v té databázi jsou skutečně v kódování, které je nastavené v databázi. Databáze může mít například nastavenou latin1, nicméně data mohou být v 1250. Pokud byste nespecifikoval kódování, a očekával 1250, tak dostanete data korektní. Pokud ale chcete dostat data v UTF8, tak se použije transformace latin1->UTF8, která data zdeformuje. Takže bych se podíval na vlastní kódování databáze, i na to jestli data tomuto kódování odpovídají. Bylo zde docela dost MySQL databází s výchozím Latin1 kódováním, nicméně data v nich byly v Latin2 nebo spíš v 1250.
Název: Re:PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Ondrej Nemecek 07. 12. 2020, 15:05:49
Zdravim.
Doteraz som nemal problem s pouzivanim tohoto
Kód: [Vybrat]
$info = array('Database'=>$db,'UID'=>$user,'PWD'=>$pass, 'CharacterSet'=>'UTF-8','ReturnDatesAsStrings'=>true);
// Connect to the database
        $connector = sqlsrv_connect($host, $info);
avsak pri jednej aplikacii mi to vrazia mena uzivatelov v tvare
Kód: [Vybrat]
Žilíková a podobne. Co s tym? Pozeral som po googly ale nenasiel som nic co by mi pomoholo.
Databaza je nastavena Slovak_CI_AS tak ako vsetky

Je otázkou jestli data v té databázi jsou skutečně v kódování, které je nastavené v databázi. Databáze může mít například nastavenou latin1, nicméně data mohou být v 1250. Pokud byste nespecifikoval kódování, a očekával 1250, tak dostanete data korektní. Pokud ale chcete dostat data v UTF8, tak se použije transformace latin1->UTF8, která data zdeformuje. Takže bych se podíval na vlastní kódování databáze, i na to jestli data tomuto kódování odpovídají. Bylo zde docela dost MySQL databází s výchozím Latin1 kódováním, nicméně data v nich byly v Latin2 nebo spíš v 1250.

A nejsnašší cesta k opravě? Dump + jeho ruční oprava následovaný zpětným importem dumpu?
Název: Re:PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Pavel Stěhule 07. 12. 2020, 17:30:17

A nejsnašší cesta k opravě? Dump + jeho ruční oprava následovaný zpětným importem dumpu?

Řekl bych, že ano. MySQL není moje doména - ale u Postgresu bych to svým zákazníkům doporučil. Asi bych dokázal (na Postgresu) o něco rychlejší postup, ale značně ošklivý, a stejně bych musel reindexovat všechny indexy v databázi, takže stejně by tam byl nějaký výpadek, a u větší databáze gro by byla právě reindexace. Takže dump a load je jednoduché, čisté a blbuvzdorné řešení. Bacha u dumpu je nutné nespecifikovat kódování (aby nedošlo k zmatené konverzi), a dost možná, že se bude muset sáhnout do dumpu, a ručně jej poeditovat.
Název: Re:PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Miroslav Šilhavý 07. 12. 2020, 21:46:01
MySQL není moje doména

Bacha, tady jde o MS SQL, a podle prvotního popisu je Slovak_CI_AS nastavené správně.
Název: Re:PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Pavel Stěhule 08. 12. 2020, 06:48:22
MySQL není moje doména

Bacha, tady jde o MS SQL, a podle prvotního popisu je Slovak_CI_AS nastavené správně.

Pořád je otázkou, jestli jsou data v databázi ok?
Název: Re:PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Miroslav Šilhavý 08. 12. 2020, 08:18:44
Pořád je otázkou, jestli jsou data v databázi ok?

Napadá mě, nemá to SQL server uložené v UTF-16?
https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?redirectedfrom=MSDN&view=sql-server-ver15#Supplementary_Characters

Na FreeBSD musím používat freetds (MS driver tam není k dispozici), a musím používat:
Kód: [Vybrat]
client charset = UTF-8
use utf-16 = yes
Název: Re:PHP SRV_SQL charset vracia zle enkodovane znaky
Přispěvatel: Wangarad 08. 12. 2020, 08:52:23
Dakujem za rady. V tej DB je to tiez tak debilne vlozene. Takze som to dropol a nahodil korektne nanovo. To bola najschopnejsia cesta.