Fórum Root.cz

Hlavní témata => Server => Téma založeno: iko 07. 09. 2018, 11:06:53

Název: MySQL + PHP mi osekává longtext
Přispěvatel: iko 07. 09. 2018, 11:06:53
zdravim

Stretol sa niekto s tym, ze mi PHP MySQL osekava text, co davam do longtext pola?

Mam $q = "insert into ....", tam insertujem premennu, v ktorej je nejakych 200kB textu. Samozrejme to ide cez mysql_real_escape_string.
Potom volam mysql_query(...).
No a text je osekany, ziadna chyba. Ked si ten query string dam ulozit do subory a vykonam ho cez mysql ... <subor, tak to zbehne a je tam cely text.
Hm?

max_allowed_packet mam 10M
php 5.3.3
mysql 5.1.73
Název: Re:mysql + php mi osekava longtext
Přispěvatel: RDa 07. 09. 2018, 11:20:42
Je osekany vzdy na stejne delce? Neni tam nejaky specialni znak?
Zkus si to ve virtualu s aktualni verzi mysql (resp. mariadb) a PHP, ty archaicke verze biji do oci.
Název: Re:mysql + php mi osekava longtext
Přispěvatel: iko 07. 09. 2018, 11:22:17
Je osekany vzdy na stejne delce? Neni tam nejaky specialni znak?
Zkus si to ve virtualu s aktualni verzi mysql (resp. mariadb) a PHP, ty archaicke verze biji do oci.

skusim na novsich verziach... tieto verzie su stare, ale neda sa ich updatnut (vytazeny stroj)
Název: Re:mysql + php mi osekava longtext
Přispěvatel: RDa 07. 09. 2018, 11:24:56
Jo a pouzivas tam PDO ?
Název: Re:mysql + php mi osekava longtext
Přispěvatel: iko 07. 09. 2018, 11:34:51
Jo a pouzivas tam PDO ?

nie
Název: Re:MySQL + PHP mi osekává longtext
Přispěvatel: iko 07. 09. 2018, 12:26:52
takze uz to mam OK... ide to cez mysqli

zrejme to ma nieco s
The mysql extension provides a procedural interface and is intended for use only with MySQL versions older than 4.1.3. This extension can be used with versions of MySQL 4.1.3 or newer, but not all of the latest MySQL server features will be available.
Název: Re:MySQL + PHP mi osekává longtext
Přispěvatel: iko 07. 09. 2018, 12:46:12
takze to neni s tym mysqli, ale v nejakom blbom znaku, co nesedi do kodovania utf8 a tam to zakape.
Název: Re:MySQL + PHP mi osekává longtext
Přispěvatel: Kit 07. 09. 2018, 14:14:28
takze to neni s tym mysqli, ale v nejakom blbom znaku, co nesedi do kodovania utf8 a tam to zakape.

To by chtělo vypátrat, o který znak se jedná. Je také možné, že ten string uřízne PHP ještě před uložením do DB.

BTW: Funkce mysql_* v nových verzích PHP už nejsou. Je dobré přejít alespoň na MySQLi nebo ještě lépe na PDO.
Název: Re:MySQL + PHP mi osekává longtext
Přispěvatel: iko 07. 09. 2018, 14:31:06
To by chtělo vypátrat, o který znak se jedná. Je také možné, že ten string uřízne PHP ještě před uložením do DB.

BTW: Funkce mysql_* v nových verzích PHP už nejsou. Je dobré přejít alespoň na MySQLi nebo ještě lépe na PDO.

No uz som to prerobil na MySQLi.
A co sa tyka toho znaku, tak je to 0xA6.
Název: Re:MySQL + PHP mi osekává longtext
Přispěvatel: oss 08. 09. 2018, 09:09:15
Osekavanie textu je "fetura" spetnej kompatibility bugov MySQL :D je o tam uz 10 rokov. MySQL ti oskene text pri ukladani a povie, ze je vsteko vporiadku.
Pravdepodobne mas nastevny constraint na danom stlpci.
Název: MySQL: Znaková sada
Přispěvatel: Miloslav Ponkrác 08. 09. 2018, 09:23:37
Já bych se hlavně zeptal, v jaké znakové sadě tam text jede.

Protože to vypadá, že tazatel jaksi nepočítá s tím, že cpe v INSERTu text v nějaké znakové sadě, sloupc očekává také nějakou znakovou sadu.

Pokud třeba MySQL očekává UTF-8, tak samozřejmě poslání bajtu 0xA6 je chybou, protože to nemůže být první bajt žádného platného znaku.
Název: Re:MySQL + PHP mi osekává longtext
Přispěvatel: Kit 08. 09. 2018, 10:26:36
Osekavanie textu je "fetura" spetnej kompatibility bugov MySQL :D je o tam uz 10 rokov. MySQL ti oskene text pri ukladani a povie, ze je vsteko vporiadku.

Není to úplně potichu - MySQL pošle warning, že text byl zkrácen. Jenže kdo ho čte?