PHP SRV_SQL charset vracia zle enkodovane znaky

PHP SRV_SQL charset vracia zle enkodovane znaky
« kdy: 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


Re:PHP SRV_SQL charset vracia zle enkodovane znaky
« Odpověď #1 kdy: 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.

Re:PHP SRV_SQL charset vracia zle enkodovane znaky
« Odpověď #2 kdy: 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?

Re:PHP SRV_SQL charset vracia zle enkodovane znaky
« Odpověď #3 kdy: 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.

Re:PHP SRV_SQL charset vracia zle enkodovane znaky
« Odpověď #4 kdy: 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ě.


Re:PHP SRV_SQL charset vracia zle enkodovane znaky
« Odpověď #5 kdy: 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?

Re:PHP SRV_SQL charset vracia zle enkodovane znaky
« Odpověď #6 kdy: 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

Re:PHP SRV_SQL charset vracia zle enkodovane znaky
« Odpověď #7 kdy: 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.