Fórum Root.cz
Hlavní témata => Server => Téma založeno: 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
-
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.
-
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)
-
Jo a pouzivas tam PDO ?
-
Jo a pouzivas tam PDO ?
nie
-
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.
-
takze to neni s tym mysqli, ale v nejakom blbom znaku, co nesedi do kodovania utf8 a tam to zakape.
-
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.
-
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.
-
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.
-
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.
-
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?