Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

#3 Nespustí se dlouhý INSERT příkaz

closed-fixed
Jakub Vrána
None
5
2009-11-06
2009-08-17
Anonymous
No

Pokud do 'SQL přikaz' zadám dlouhý INSERT příkaz (např. data z exportu z lokální databáze - cca 20kB, většina typu TEXT), nespustí se. Nespustí se ani při odeslání přes soubor. Pokud se ho pokusím spustit s ostatními příkazy, spustí se všechny příkazy před ním, ale za ním nic (včetně onoho INSERT), nenapíše se ani žádná chyba, prostě jakoby víc příkazů neexistovalo. Pokud se pokusím odeslat samotný příkaz INSERT, dostanu okamžitě chybu prohlížeče "Připojení bylo ukončeno vzdáleným serverem".

Discussion

  • Jakub Vrána
    Jakub Vrána
    2009-08-17

    Nedaří se mi to reprodukovat. Zkontrolujte prosím velikost konfigurační direktivy max_allowed_packet a zkuste příkaz spustit také přímo z MySQL konzole.

     
  • Jakub Vrána
    Jakub Vrána
    2009-08-17

    • assigned_to: nobody --> jakubvrana
    • status: open --> pending
     
  • max_allowed_packet = 1M
    Ten stejný příkaz lze bez problému spustit v MySQL konzoli i v phpMyAdmin.
    V Admineru ale stále nic, ani na desátý pokus v úplně jiném prohlížeči.

    Ale zjistil jsem, že tento problém přetrvává pouze u mě na lokálním serveru, na vzdáleném se příkaz normálně spustí. Nemůže jít o nějaký problém s rozdílnou verzí MySQL nebo PHP? Na lokálním serveru mám MySQL 5.1.30, kdežto na vzdáleném 5.0.51a. Na lokálním také běží PHP 5.3, na vzdáleném 5.2.10.

    Jak jsem psal o tom, že se nespustí ostatní příkazy, dokonce se ani nevykreslí zbytek stránky. Jak Adminer dojde k tomu dlouhému příkazu, prostě ukončí spojení s prohlížečem a zbytek stránky už nepošle.

     
    • status: pending --> open
     
  • Jakub Vrána
    Jakub Vrána
    2009-08-19

    • status: open --> pending
     
  • Jakub Vrána
    Jakub Vrána
    2009-08-19

    Zkuste prosím zjistit maximální délku příkazu, který se ještě provede. Třeba nás to někam navede.

     
  • Zjistil jsem, že nejde o délku příkazu, ale pokud se pokusím do sloupce datového typu TEXT vložit hodnotu, která je větší než 8kB přesně (8192 bytů) - např. více než 4096 znaků v UTF-8.

     
    • status: pending --> open
     
  • Špatně se chová např. tento sql soubor:
    http://leteckaposta.cz/572902041

    Pokud příkazy spustím pomocí nahrání souboru, provedou se příkazy do prvního INSERTU včetně, pokud příkazy do textového pole nakopíruju z notepadu, neprovede se ani ten první INSERT.

     
  • Jakub Vrána
    Jakub Vrána
    2009-08-19

    • status: open --> closed
     
  • Jakub Vrána
    Jakub Vrána
    2009-08-19

    Díky za funkční ukázku, chybu jsem opravil v SVN.

     
  • Já bych řekl, že může souviset nejenom s velikostí, ale i použitím zpětného lomítka v příkazu.
    V mém případě (localhost, EasyPHP 3.1) chybu neoznámí Adminer, ale Apache - a sice "Spojení přerušeno".

     
  • Je dost pravděpodobné, že to bude souviset se zpětnáým lomítkem, možná bude i chyba v mysqli. Ale i když jsem stáhl poslední verzi z SVN, moc to nepomohlo. Daný příklad prikaz.sql sice funguje, ale stačí INSERT o jedno \a prodloužit a zase mi to vrací chyby.

    prikaz2.sql: http://leteckaposta.cz/125666245

     
  • Jakub Vrána
    Jakub Vrána
    2009-08-20

    • status: closed --> open
     
  • Jakub Vrána
    Jakub Vrána
    2009-08-20

    Díky za důslednost. Doufám, že se to podařilo vyřešit pomocí ungreedy RE, ale na pravou příčinu problému jsem po pravdě řečeno nepřišel.

     
  • Jakub Vrána
    Jakub Vrána
    2009-08-20

    • status: open --> closed
     
  • Je mi to líto, ale stále vám nemůžu dát pokoj. Je pravda, že mou uvedený prikaz2.sql už funguje. Ale stále nemůžu rozchodit i úplně triviální příkazy, např:

    http://leteckaposta.cz/107435172

    (obsahuje jen šestkrát sekvenci \r\n, jinak znaky x a mezeru, prostě běžná data typu TEXT)

     
  • Jakub Vrána
    Jakub Vrána
    2009-08-21

    Díky za trpělivost. Vzdal jsem to a celé jsem to předělal. Díky tomu jsem navíc objevil chybu, ke které docházelo při neuzavřeném /*.

     
  • Jakub Vrána
    Jakub Vrána
    2009-11-06

    • status: closed --> closed-fixed