UTF8, DBD::mysql a binarni data

Honza Pazdziora adelton na fi.muni.cz
Pondělí Duben 18 09:24:00 MEST 2005


On Sat, Apr 16, 2005 at 08:52:38PM +0200, Jan Kasprzak wrote:
> Honza Pazdziora wrote:
> : Tohle je divne. Znamena to, ze DBD::mysql vrati ten retezec
> : s nastavenym UTF-8 flagem, i kdyz to neni UTF-8 retezec?
> 
> 	Ano, tak nejak se mi to jevi. Ovsem nevim na zaklade ceho
> tak DBD::mysql soudi (locale na to nema vliv, zkousel jsem).

Tipl bych si, ze na zaklade nejake chyby. ;-)

> : Nejdriv si 
> : musime ujasnit, co vlastne za data mame. Co na tom rika
> : 
> : 	printf map { "%x ", ord $_ } split //, $ref->[0]
> : 
> : nebo ekvivalent?
> 
> 	To jsem taky zkousel, vysledek je
> 
> Malformed UTF-8 character (unexpected non-continuation byte 0x6f, immediately after start byte 0xe8) in ord at ./mysqlsync.pl line 43.

Jup. Takze to fakt vypada, ze mame ne-UTF-8 retezec s UTF-8 flagem. To 
je spatny.

> : Pokud ten flag chces vypnout (aby to byl echt binarni retezec), tak 
> : utf8::downgrade.
> 
> 	To mi spadne s
> 
> Wide character in subroutine entry at ./mysqlsync.pl line 43.
> 
> kde radek 43 obsahuje prave to utf8::downgrade($ref->[0]).
> 
> : Jeste takovy napad -- deje se to, i kdyz bys ta data vytahl pomoci 
> : fetchrow_array?
> 
> 	Zajimavy napad. Fetchrow_array zda se funguje spravne.
> Mas i nejake vysvetleni?

Magie. ;-)

Hmmm. Nejakou dobu zpatky slo v dbi-dev, ze v DBD::mysql (ale mozna
v DBI) je nejaka chyba, ze se ten UTF-8 flag nenuluje. Tzn. ze pri 
fetchrow_arrayref se znovu pouzije SV, nastavi se mu nova hodnota, ale 
flag zustane (nebo neco v tom smyslu).

Zkus nove DBI / DBD::mysql.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Perl