MySQL + PHP mi osekává longtext

iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
MySQL + PHP mi osekává longtext
« kdy: 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
« Poslední změna: 07. 09. 2018, 11:32:00 od Petr Krčmář »


RDa

  • *****
  • 2 619
    • Zobrazit profil
    • E-mail
Re:mysql + php mi osekava longtext
« Odpověď #1 kdy: 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.

iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:mysql + php mi osekava longtext
« Odpověď #2 kdy: 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)

RDa

  • *****
  • 2 619
    • Zobrazit profil
    • E-mail
Re:mysql + php mi osekava longtext
« Odpověď #3 kdy: 07. 09. 2018, 11:24:56 »
Jo a pouzivas tam PDO ?

iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:mysql + php mi osekava longtext
« Odpověď #4 kdy: 07. 09. 2018, 11:34:51 »
Jo a pouzivas tam PDO ?

nie


iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:MySQL + PHP mi osekává longtext
« Odpověď #5 kdy: 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.

iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:MySQL + PHP mi osekává longtext
« Odpověď #6 kdy: 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.

Kit

Re:MySQL + PHP mi osekává longtext
« Odpověď #7 kdy: 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.

iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:MySQL + PHP mi osekává longtext
« Odpověď #8 kdy: 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.

oss

Re:MySQL + PHP mi osekává longtext
« Odpověď #9 kdy: 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.

MySQL: Znaková sada
« Odpověď #10 kdy: 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.

Kit

Re:MySQL + PHP mi osekává longtext
« Odpověď #11 kdy: 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?